机器学习基础02——K-近邻算法(knn)算法的使用

K-近邻的基本思想

K-近邻算法是一种简单的有监督学习,它即可以解决分类问题也可以解决回归问题,这里是尝试使用它解决分类问题。

K-近邻算法的直接思想就是测试样本在特征空间中选取k个最邻近的样本中,大多数样本属于哪个类别,测试样本就属于哪个类别。

KNN算法的工作步骤:1、计算测试数据与各个训练数据之间的距离2、按照距离升序排序,选取距离最近的k个点 3、计算距离最近的k个点所属类别出现的频率 4、返回这k个点出现频率最高的类别作为测试样本的类别。

代码实现

KNN算法对鸢尾花数据集训练评分,样本预测

from sklearn.datasets import load_iris  #引入鸢尾花的数据集
from sklearn.neighbors import KNeighborsClassifier #引入knn算法
from sklearn.model_selection import train_test_split #引入该方法将数据集划分训练集和测试集
import numpy as np
iris=load_iris()  #导入iris的数据
#print(iris.keys()) #查看iris的主要内容
#print(iris.DESCR)  #查看iris的描述
X=iris.data         #X=鸢尾花的数据
y=iris.target       #y=鸢尾花的标签
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=33)#将数据集的百分之三十划分为测试集,百分之七十划分为训练集分别赋给X_train,y_train(训练),X_test,y_test(测试集)
knn=KNeighborsClassifier()  #knn=KNN算法
knn.fit(X_train,y_train)   #对训练集进行训练
score=knn.score(X_test,y_test)   #使用测试集进行一个评分,观察训练效果
print(f'KNN算法的准确率为:{score}')
#print(X.shape)    #观察数据集的形状(150,4)可知道鸢尾花有四个特征值
y_predict=knn.predict(X_test)     #对模型进行一个预测
X_sample=np.array([[3.1,4.2,2.0,0.6]])   
y_sample=knn.predict(X_sample)    #对新数据进行预测
print("新数据点({0})在KNN分类器上的分类结果为:{1}".format(X_sample[0], y_sample))
print("新数据点({0})标签名字:{1}".format(X_sample[0], iris.target_names[y_sample]))   

机器学习基础02——K-近邻算法(knn)算法的使用_第1张图片

KNN算法对已有进行训练评分,样本预测

#例题2(对已有的数据集进行分析):
data = np.array([[1, 1, 1, 1],[0.5, 1, 1, 1],[0.1, 0.1, 0.1, 0.1],[0.5, 0.5, 0.5, 0.5],[1, 0.8, 0.3, 1],
[0.6, 0.5, 0.7, 0.5],[1, 1, 0.9, 0.5],[1, 0.6, 0.5, 0.8],[0.5, 0.5, 1, 1],[0.9, 1, 1, 1],[0.6, 0.6, 1, 0.1],
[1, 0.8, 0.5, 0.5],[1, 0.1, 0.1, 1],[1, 1, 0.7, 0.3],[0.2, 0.3, 0.4, 0.5],[0.5, 1, 0.6, 0.6]])

labels = ['女神','淑女','丑女','一般型','淑女','一般型','女神','一般型','淑女','女神',
'丑女','可爱型','可爱型','淑女','丑女','可爱型']
X_train,X_test, y_train, y_test = train_test_split(data, labels ,test_size = 0.3, random_state = 20)
knn = KNeighborsClassifier(n_neighbors=8)
knn.fit(X_train, y_train)
X_sample = np.array([[1.1,1.5,2.1,0.9]])
y_sample = knn.predict(X_sample)
print(knn.predict_proba(X_sample))  #返回各个类别的概率
print("新数据点({0})在KNN分类器上的分类结果为:{1}".format(X_sample[0], y_sample))

 

小结

knn.fit(x,y),训练数据模型

knn.score(x,y):对数据进行评价,得到准确率

knn.predict(x)使用模型对预测,返回测试样本的类别

knn.predict_proba 返回各个类别的概率

你可能感兴趣的:(算法,近邻算法)