Sklearn学习笔记##第一记
第一圈实线半径为0.5,第二圈虚线半径为1.0。
问题是我们如何给绿点归类呢?
如果我们给他限定一个范围,假设范围就是0.5。则此时红三角贡献2/3,把绿点归类为红三角。假设我们修改范围为1.0。则此时蓝方块贡献3/5,把绿点归类为蓝方块。
KNN分类
大致思路就是:一个样本在特征空间中的k个最相似的样本中的大多数属于某一类别,则样本也属于这个类别。
通俗说就是:在一个范围内,该物体的类型取决于离他最近的样本的类型。
读者自行学习深入知识
不多说了,开始了。
导入模块
sklearn在老本版中使用 sklearn.cross_validation import train_test_split
这个模块。该模块用下边的 模块取代。
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KneighborsClassifier
装载数据
将iris的数据装入iris_x 中,讲iris的类别装入iris_y 中
Data=datasets.load_iris()
iris_x=Data.data
iris_y=Data.target
交叉验证
经数据拆分为训练集和验证集。test_size=0.2 设置验证集占20%。同时将数据打乱,有利于训练。
X_train,X_test,Y_train,Y_test=train_test_split(iris_x,iris_y,test_size=0.2)
建模
Knn=KNeighborsClassifier()
训练及验证
Knn.fit(X_train,Y_train) #用于训练
result=Knn.predict(X_test) #预测结果
print(Y_test) #输出测试集的结果
打分
score=knn.score(X_train,Y_train) #自我打分,对当前预测结果打分。
print(score)
结果
最终通过模型预测,输出的result预测值虽然有误差,但是都完全正确。最后的评估为0.99..
result:[0 0 2 1 0 1 2 2 2 0 2 1 0 0 2 0 2 2 1 0 2 2 2 0 2 1 1 2 0 0 2 2 2 0 0 1 2 0 1 0 2 1 0 1 1]
Y_test:[0 0 2 1 0 1 2 2 1 0 2 1 0 0 2 0 1 2 1 0 2 2 2 0 2 1 1 2 0 0 2 2 2 0 0 1 2 0 1 0 1 1 0 1 1]
score:0.990476190476
但我们修改K的值(n_neighbors)n_neighbors=1时,准确率达到了1.0。
result:[1 2 1 0 2 2 0 1 1 1 0 1 1 2 1 2 1 1 0 1 1 2 1 2 2 2 2 2 0 2 0 1 2 2 2 2 2 1 2 1 0 0 0 1 2]
Y_test:[1 2 2 0 2 2 0 1 1 1 0 1 1 2 1 1 1 1 0 1 1 2 1 2 2 1 2 2 0 2 0 1 2 2 2 2 21 2 1 0 0 0 1 2]
score: 1.0
继续更新。