python调用scikit-learn机器学习
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
python调⽤scikit-learn机器学习不⽀持深度学习和强化学习
numpy介绍:
np.eye(n)⽣成⼀个n维单元数组
数据预处理:
iris数据加载
from sklearn import datasets
iris = datasets.load_iris()
数据展⽰
显⽰iris的信息
print(iris.data)
[[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]
[4.7 3.2 1.3 0.2]
……
[5. 3.6 1.4 0.2]
[5.4 3.9 1.7 0.4]
[4.6 3.4 1.4 0.3]]
每列数据表⽰不同样本同⼀属性下对⽤的数值
print(iris.feature_names)
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
输出⽬标结果
print(iris.target)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2]
结果的含义
print(iris.target_names)
['setosa' 'versicolor' 'virginica']
确认数据类型
print(type(iris.data))
print(type(iris.target))
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
确认维度
print(iris.data.shape)
print(iris.target.shape)
(150, 4)
(150,)
X输⼊数据赋值,y输出数据赋值
X = iris.data
y = iris.target
模型训练:
分类:根据数据集⽬标的特征或属性,划分到已有的类别中
常⽤分类算法:KNN(K近邻)、逻辑回归、决策树、朴素贝叶斯
KNN(最简单的机器学习算法之⼀):
给定⼀个训练数据集,对新的输⼊实例,在训练数据集中找到与该实例最邻近的l个实例,这k个实例多数是什么类型就将该输⼊实例分类到这个类中
模型调⽤
from sklearn.neighbors import KNeighborsClassifier
创建实例
knn=KNeighborsClassifier(n_neighbors=5)
模型训练
模型训练与预测
y_pred=knn.fit(X,y)
knn.predict(y_pred)
准确率
from sklearn.metrics import accuracy_score
print(accuracy_score(y,y_pred))
数据分离
from sklearn.model_selection import train_test_split
#训练输⼊数据,预测的输⼊数据,训练结果,预测结果
x_train,x_test,y_train,y_test=train_test_split(X,y,test_size=0.4)
分离后数据集的训练与评估
knn_5_s = KNeighborsClassifier(n_neighbors=5)
knn_5_s.fit(X_train, y_train)
y_train_pred=knn_5_s.predict(X_train)
y_test_pred=knn_5_s.predict(X_test)
确定k值
k_range=list(range(1,26))
score_train=[]
score_test=[]
for k in k_range:
knn=KNeighborsClassifier(n_neighbors=k)
knn.fit(X_train,y_train)
y_train_pred=knn.predict(X_train)
y_test_pred=knn.predict(X_test)
score_train.append(accuracy_score(y_train,y_train_pred))
score_test.append(accuracy_score(y_test,y_test_pred))
图形展⽰
import matplotlib.pyplot as plt
%matplotlib inline
#展⽰k值与训练数据集预测准确率之间的关系
plt.plot(k_range,score_test)
plt.xlabel('K(KNN model)')
plt.ylabel('Training Accuracy')
训练数据集准确率随着模型复杂⽽提⾼
测试数据集准确率在模型过于简单或复杂⽽准确率更低
KNN模型中,模型复杂度由K决定,(k越⼩,复杂度越⾼)
对新数据进⾏预测
knn_11=KNeighborsClassifier(n_neighbors=11)
knn_11.fit(X_train,y_train)
knn_11.predict([[1,2,3,4]])
逻辑回归模型:
⽤于解决分类问题的⼀种模型。
根据数据特征或属性,计算其归属于每⼀类别的概率P(x),根据概率数值判断其所属类别。
主要应⽤场景:⼆分类问题。
P(x)=1/(1+e-(ax+b)) y={1, P(x)≥0.5 0,P(x)<0.5
其中y为类别结果,P为概率,x为特征值,a、b为常量
(⽪马印第安⼈糖尿病数据集)
输⼊变量:独⽴变量包括患者的怀孕次数,葡萄糖量,⾎压,⽪褶厚度,体重指数,胰岛素⽔平,糖尿病谱系功能,年龄
输出结果:是否含义糖尿病
数据来源:Pima Indians Dianbetes dataset
预测准确率的局限性:
⽆法真实反映模型针对各个分类的预测准确度
准确率可以⽅便的⽤于衡量模型的整体预测效果,但⽆法反应细节信息,具体表现:
没有体现数据的实际分布情况
没有体现模型错误预测的类型
空准确率:当模型总是预测⽐例较⾼的类别,其预测准确率的数值
混淆矩阵(误差矩阵):
⽤于衡量分类算法的准确程度
True Positives(TP):预测准确、实际为正样本的数量(实际为1,预测为1)
True Negatives(TN):预测准确、实际为负样本的数量(实际为0,预测为0)
False Positives(FP):预测错误、实际为负样本的数量(实际为0,预测为1)
False Negatives(FN):预测错误、实际为正样本的数量(实际为1,预测为0)
公式定义
准确率
整体样本中,预测正确的⽐例
(Accuracy)
错误率
整体样本中,预测错误的⽐例
(Misclassification Rate)
召回率
正样本中,预测正确的⽐例
(Recall)
特异度
负样本中,预测正确的⽐例
(Specificity)
精确率
预测结果为正样本中,预测正确的⽐例
(Precision)
F1分数
综合Precision和Recall的判断指标
(F1 Score)
混淆矩阵指标特点:
分类任务中,相⽐单⼀的预测准确率,混淆矩阵提供了更全⾯的模型评估信息
通过混淆矩阵,我们可以计算出多样性的模型表现衡量指标,从⽽更好地选择模型
哪个衡量指标更关键?
衡量指标的选择取决于应⽤场景
垃圾邮件检测(正样本判断为“垃圾邮件”):希望普通邮件(负样本)不要被判断为垃圾邮件(正样本),需要关注精确率和召回率异常交易检测(正样本为“异常交易”):希望所有的异常交易都被检测到,需要关注特异度
#数据预处理
import pandas as pd
path='csv⽂件路径/xxx.csv'
pima=pd.read_csv(path)
#X,y赋值
feature_names=['pregnant','insulin','bmi','age']
X=pima[feature_names]
y=bel
#维度确认
print(X.shape,y.shape)
#数据分离
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=0)
#模型训练
from sklearn.linear_model import LogisticRegression
logreg=LogisticRegression()
logreg.fit(X_train,y_train)
#测试数据集结果预测
y_pred=logreg.predict(X_test)
#使⽤准确率进⾏评估
from sklearn import metrics
print(metrics.accuracy_score(y_test,y_pred))
#确认正负样本数据量
y_test.value_counts()
#1的⽐例
y_test.mean()
#0的⽐例
1-y_test.mean()
#空准确率
max(y_test.mean(),1-y_test.mean())
#四个因⼦赋值
cofusion=metrics.confusion_matrix(y_test,y_pred) TN=confusion[0,0]
FP=confusion[0,1]
FN=confusion[1,0]
TP=confusion[1,1]
print(TN,FP,FN,TP)
/*指标计算参见上⾯的公式*/。