K-近邻算法是一种简单的有监督学习,它即可以解决分类问题也可以解决回归问题,这里是尝试使用它解决分类问题。
K-近邻算法的直接思想就是测试样本在特征空间中选取k个最邻近的样本中,大多数样本属于哪个类别,测试样本就属于哪个类别。
KNN算法的工作步骤:1、计算测试数据与各个训练数据之间的距离2、按照距离升序排序,选取距离最近的k个点 3、计算距离最近的k个点所属类别出现的频率 4、返回这k个点出现频率最高的类别作为测试样本的类别。
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]))
#例题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 返回各个类别的概率