python-KNN算法运用练习之分类

数据来源:ecoli数据集,https://sci2s.ugr.es/keel/dataset.php?cod=61

问题描述:通过对细胞7个属性的测量得分,预测蛋白质的定位位点,一共有8个定位点。

模型选择与评估:用cross_val_score实现,返回打分结果,分数越高,性能越好。参数cv,表示几折交叉;参数scroing,常用“neg_mean_absolute_error"(MAE相反数)、”neg_mean_squared_error"、“accuracy"等

from sklearn.model_selection import cross_val_score
scores=cross_val_score(knn,X,y,cv=10,scoring='accuracy')  

数据预处理:目标变量离散化,分类问题中,sklearn不能输出字符型变量,要用LabelEncoder先做预处理。

from sklearn.preprocessing import LabelEncoder
le=LabelEncoder()        #实例化一个LabelEncoder对象
le.fit(y)                #调用fit方法,遍历目标变量y的值
y=le.transform(y)        #将字符串变量转化,对应到一个离散型数字上

练习代码如下:

import os
import pandas as pd
from sklearn import neighbors
from sklearn import datasets
from sklearn.model_selection import cross_val_score
os.chdir(r"C:\Users\勤奋的大眼仔\Documents\数据挖掘")
data=pd.read_csv('ecoli.csv')
#输入特征值 Mcg, Gvh, Lip, Chg, Aac, Alm1, Alm2
#输出 Site  {cp,im,imS,imL,imU,om,omL,pp}
#数据处理   添加表头属性值
data.columns=["Mcg","Gvh","Lip","Chg","Aac","Alm1","Alm2","Site"]
data.isnull().sum()    #查看是否有缺失值
data.shape     
le=LabelEncoder()   
le.fit(data.Site)  
knn=neighbors.KNeighborsClassifier(6,weights='distance')  
X=data[data.columns[0:6]]
y=le.transform(data.Site)  
scores=cross_val_score(knn,X,y,cv=10,scoring='accuracy')  
print(np.mean(scores))   
#分类准确率为0.7999132377908719

 

你可能感兴趣的:(机器学习练习)