机器学习之sklearn-KNN近邻算法分类小案例(乳腺癌预测最优模型)

(案例):用sklearn包实现knn分类小案例,通过交叉验证网格搜索获取最优参数模型,进行参数评估。
导包:
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import f1_score,precision_score,recall_score,roc_auc_score,roc_curve
import matplotlib.pyplot as plt
import matplotlib as mpl
设置字符集,防止中文乱码
mpl.rcParams[‘font.sans-serif’]=[u’simHei’]
mpl.rcParams[‘axes.unicode_minus’]=False

获取数据:
1.导入乳腺癌数据
data_breast_cancer=load_breast_cancer()
2.获取特征值数据
X=data_breast_cancer.data
3.获取目标值数据
y=data_breast_cancer.target
4.分割数据集,训练集和测试集
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=122)

数据处理:
1.方差均值归一
std=StandardScaler()
2.训练训练集,获取方差和均值
std.fit(X_train)
3.将训练集和测试集归一
X_train_std=std.transform(X_train)
X_test_std=std.transform(X_test)

最优参数获取:
1.参数字典,选择超参
parameters={
‘n_neighbors’:[i for i in range(3,10)], #k值选择
‘weights’:[‘distance’,‘uniform’], #权重计算方式
‘p’:[i for i in range(1,6)] #选择计算公式
}

2.实例化分类器
knn=KNeighborsClassifier()

3.实例化网格搜索交叉验证:3重交叉验证
gc=GridSearchCV(knn,param_grid=parameters,cv=3,n_jobs=1)

训练数据建模:
gc.fit(X_train_std,y_train)

模型评估:
1.最优模型
mod=gc.best_estimator_
print(‘最优模型:’,mod)
2.最优参数
best_param=gc.best_params_
print(‘最优参数:’,best_param)
3.最优得分
best_sco=gc.best_score_
print(‘最优得分:’,best_sco)
4.预测–测试结果准确性
predict=gc.score(X_test_std,y_test)
print(‘本次结果预测准确率为:’,predict)
5.对测试集的预测值
res=gc.predict(X_test_std)
6.预测–测试结果精确率
per=precision_score(y_test,res)
print(‘预测–测试结果精确率:’,per)
7.预测–测试结果召回率
rec=recall_score(y_test,res)
print(‘预测–测试结果召回率:’,rec)
8.预测–测试结果f1score
f1=f1_score(y_test,res)
print(‘预测–测试结果f1_score:’,f1)
9.预测–测试结果auc
auc=roc_auc_score(y_test,res)
print(‘预测–测试结果AUC:’,auc)
10测试集结果和真实值对比
for i in range(len(y_test)):
#预测并打印真实值和测试值对比
p=gc.predict(X_test_std[i].reshape(1,-1))
print(‘第%s次测试的真实值是:%s,预测值是:%s’%(i+1,y_test[i],p))

数据可视化: roc曲线绘制
p_pro=gc.predict_proba(X_test_std)[:,1]
fprs,tprs,t=roc_curve(y_test,p_pro)
plt.plot(fprs,tprs,‘g’,lw=2,label=‘AUC值:%.3f’%auc)
plt.plot([0,1],[0,1],‘r’,lw=2)
plt.title(‘knn算法预测乳腺癌的ROC曲线’)
plt.legend(loc=‘upper right’)
plt.grid(b=True)
plt.savefig(’./breast_canner_pre.jpg’)
plt.show()

ROC曲线可视化:
机器学习之sklearn-KNN近邻算法分类小案例(乳腺癌预测最优模型)_第1张图片
结果展示:
最优模型: KNeighborsClassifier(algorithm=‘auto’, leaf_size=30, metric=‘minkowski’,
metric_params=None, n_jobs=None, n_neighbors=3, p=1,
weights=‘distance’)
最优参数: {‘n_neighbors’: 3, ‘p’: 1, ‘weights’: ‘distance’}
最优得分: 0.9698492462311558
本次结果预测准确率为: 0.9766081871345029
预测–测试结果精确率: 0.9821428571428571
预测–测试结果召回率: 0.9821428571428571
预测–测试结果f1_score: 0.9821428571428571
预测–测试结果AUC: 0.9741222760290558
第1次测试的真实值是:1,预测值是:[1]
第2次测试的真实值是:1,预测值是:[1]
第3次测试的真实值是:1,预测值是:[1]
第4次测试的真实值是:0,预测值是:[0]
第5次测试的真实值是:1,预测值是:[1]
第6次测试的真实值是:1,预测值是:[1]
第7次测试的真实值是:1,预测值是:[1]
第8次测试的真实值是:0,预测值是:[0]
第9次测试的真实值是:1,预测值是:[1]
第10次测试的真实值是:1,预测值是:[1]

你可能感兴趣的:(机器学习之sklearn-KNN近邻算法分类小案例(乳腺癌预测最优模型))