Advertisement

机器学习——K近邻算法及乳腺癌检测分类

阅读量:

一、引言

KNN可用于分类和回归,用于分类时是多分类方法。

注意: 由于此方法根据预测点近邻的各类点的个数多少来确定该预测点的类别,因此原始类别数据不均衡,将严重影响最终分类效果。

二、KNN分类思想

如上图所示,有两类不同的样本,分别为蓝色正方形和红色三角形,而绿色的圆代表待分类的数据,所以呢我们就要给绿色的圆分类。

  1. 如果K=3,绿色的圆最近的三个邻居分别是:两个红色的三角形和一个蓝色的正方形那我们就少数服从多数,基于统计的方法,判定绿色的圆属于红色三角形这一类。
  2. 如果K=5,绿色的圆最近的五个邻居分别是:两个红色的三角形和三个蓝色的正方形那我们就少数服从多数,基于统计的方法,判定绿色的圆属于蓝色正方形这一类。

三、 使用 KNN完成乳腺癌检测分类

乳腺癌检测分类数据集说明:

乳腺癌检测数据集:数据集共有569个样本,每个样本有30个特征,其中357个阳性,212个阴性

数据集已经在资源中上传。

四、Python代码实现

(1)读入数据集

复制代码
 import numpy as np

    
 import pandas as pd
    
 data1=pd.read_csv('./data_picture/chapter3/breast-cancer.csv')
    
 data1.head()

(2)生成训练集和测试集(我们将label提出来,生成X,Y;75%训练集25%测试集;随机种子数是个数就可以)

复制代码
 X=data1.drop('class',axis=1)

    
 y=data1['class']
    
 from sklearn.model_selection import train_test_split
    
 X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=6)

(3)由于方法用到了距离,而且距离值直接影响到聚类效果,因此在聚类前必须对每一个特征数据进行标准化或归一化处理。

复制代码
 from sklearn.preprocessing import StandardScaler

    
 ss=StandardScaler()
    
 X_train=ss.fit_transform(X_train)
    
 X_test=ss.transform(X_test)

(4)构建KNN模型和预测

复制代码
 from sklearn.neighbors import KNeighborsClassifier

    
 model=KNeighborsClassifier()
    
 model.fit(X_train,y_train)

(5)模型评估

复制代码
 from sklearn.metrics import classification_report

    
 print("训练集的模型评估指标:")
    
 model_score=model.score(X_train,y_train)
    
 print()
    
 print('The accuracy of train data',model_score)
    
 print('--------------------------------------------------------------------------')
    
 y_train_predict=model.predict(X_train)
    
 model_report1=classification_report(y_train,y_train_predict)
    
 print(model_report1)
    
 print('$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$')
    
  
    
 print("测试集的模型评估指标:")
    
 model_score=model.score(X_test,y_test)
    
 print()
    
 print('The accuracy of test data is',model_score)
    
 print('--------------------------------------------------------------------------')
    
 y_predict=model.predict(X_test)
    
 model_report=classification_report(y_test,y_predict)
    
 print(model_report)
    
 print('--------------------------------------------------------------------------')

结果:

(6)模型保存(方便后面使用)

复制代码
 from sklearn.externals import joblib

    
 joblib.dump(model,'model_knn.pkl')

(7)模型导入(利用调入的模型对数据进行预测时,要保证待预测数据和模型训练时的数据格式一致,如果训练时数据做了标准化, 则待预测数据必须做相应的标准化。)

复制代码
 model=joblib.load('model_knn.pkl')     #调入模型

    
 y_pred=model.predict(X_test)       
    
 model.score(X_test,y_test)

结果:

全部评论 (0)

还没有任何评论哟~