Advertisement

sklearn之Knn实战乳腺癌数据案例

阅读量:

sklearn之Knn实战乳腺癌数据案例

博主跳过具体细节可参考Knn算法的基本原理(相关知识可访问sklearn官方文档[https://scikit-learn.org/stable/modules/neighbors.html#k-nearest-neighbors])

复制代码
    from sklearn.datasets import load_breast_cancer
    
    from sklearn.neighbors import KNeighborsClassifier
    
    from sklearn.model_selection import train_test_split
    
    #对数据进行处理
    data_breast=load_breast_cancer()
    #提取数据的特征
    X=data_breast['data']
    #提取数据的标签
    y=data_breast['target']
    #划分数据集和测试集
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    
    #数据归一化
    from sklearn.preprocessing import MinMaxScaler 
    mms=MinMaxScaler()
    mms.fit(X_train)
    X_train=mms.transform(X_train)
    X_test=mms.transform(X_test)
    
    #数据交叉验证
    from sklearn.model_selection import cross_val_score as csv
    from sklearn.neighbors import KNeighborsClassifier
    L=[]
    for i in range (1,21):
    k=i
    knn=KNeighborsClassifier(n_neighbors=k,weights='distance')
    result=csv(knn,X_train,y_train,cv=5)
    L.append((k,result.mean(),result.var()))
    L
    
    # 画图观察交叉验证得到的k
    a=pd.DataFrame(L)
    a.columns=['k','平均准确率','方差']
    plt.figure(figsize=(8,6),dpi=100)
    plt.plot(a.k,a.平均准确率)
    plt.plot(a.k,a.平均准确率+2*a.方差,linestyle='--',color='r')
    plt.plot(a.k,a.平均准确率-2*a.方差,linestyle='--',color='r')
    plt.xticks(a.k)
    plt.xlabel('k')
    plt.ylabel('平均准确率')
    plt.title('带距离惩罚的5折交叉验证学习曲线')

图形显示为:

在这里插入图片描述

得出结果:k=15时模型效果最为稳定
建立一个k=15的knn模型

复制代码
    knn=KNeighborsClassifier(n_neighbors=15,weights='distance')
    knn.fit(X_train,y_train)
    
    #测试k=15时数据的好坏
    knn.score(X_test,y_test)

最终显示结果为0.9649122807017544
得出结果:模型在测试集的正确率大约为96.5%。
建模完毕。

全部评论 (0)

还没有任何评论哟~