在之前,我曾写过一篇KNN算法的文章,但在那片文章中,我是写了具体的KNN算法的每一步骤,而在这篇文章中我将会省略这个算法详细的过程,而更多去写sklearn实现KNN算法的过程。
所以,在这篇文章中,会有三个部分,分别是iris数据的制图,KNN算法与算法的评估三个部分。
一、数据制图
首先我们需要先通过skLearn来导入iris的数据并将之分为两部分,训练集和测试集。
这部分的代码如下:
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
iris_dataset = load_iris()
x_train,x_test,y_tarin,y_test = train_test_split(
iris_dataset['data'],iris_dataset['target'],random_state=0)
导入完毕后就是制图了,因为在这个数据集中它不只有两个特征而有更多,所以若要展示图像仅靠x与y轴显然不够,此时就需要更多的不同图像,在这些不同图像中,每个特征都会与其他特征进行组合。
代码如下:
iris_dataftam = pd.DataFrame(x_train,columns=iris_dataset.feature_names)
scatter_matrix(iris_dataftam,c=y_tarin,figsize=(15,15),marker='o',
hist_kwds={'bins':20},s=60,alpha=.8,cmap=mglearn.cm3)
plt.show()
这样我们就会看到这样的一组图像:
二、KNN算法
现在我们来构建模型。(关于KNN算法的详细部分我曾在之前的文章细说过,在此不再多言。)那么,我们直接调用sklearn函数库中的函数即可:
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(x_train,y_tarin)
在这个代码中,我们设置KNN算法中参考邻居数目为1。
然后我们将对之进行预测,我们先自行输入一组数据,假设为如下这样:
x_new = np.array([[5.1,2.8,1,0.2]])
那么我们最后预测的结果就是这样:Predicted target name: ['setosa']
三、算法的评估
接下来就是测试集发挥作用的时候了,我们通过测试集中已知的标签与数据的正确对应来先让算法在不知道标签的情况下进行以此预测,再将预测结果与正确结果对照算出正确率,这样就可以完成评估了。
代码如下:
y_pred = knn.predict(x_test)
print("Test set score: {:.2f}".format(np.mean(y_pred == y_test)))
其评估结果为:Test set score: 0.97
那么就是说对于刚才我自己随便输入的那组新数据的预测而言,其结果的正确率有97%的正确性。
说明:根据所谓的费曼学习法中,输出可以对于输入而言发挥正面影响,所以我在阅读了AndreasC与Sarah的书籍《Introduction to Machine Learnling with Python》一书的第一章后写下此文章来简单总结与回顾,以促进之后的ML方面的自学。
此上