#k最近邻算法-测试
#导入测试数据
from sklearn.datasets import load_wine
#导入knn分类器
from sklearn.neighbors import KNeighborsClassifier,KNeighborsRegressor
#导入画图工具
import matplotlib.pyplot as plt
#导入数据集拆分工具
from sklearn.model_selection import train_test_split
import numpy as np
#1 概念:KNN算法的核心思想是用距离最近的k个样本数据的分类来代表目标数据的分类。
#2 优点:
#2.1 算法简单,易于理解和实现
#2.2 对异常值不敏感
#3 缺点:
#3.1 需要设定k值,结果会受到k值的影响,不同的k值,最后得到的分类结果不尽相同
#3.2 计算量大,需要计算样本集中每个样本的距离,才能得到k个最近的数据样本
#3.3 训练样本集不平衡导致结果不准确问题
#knn分类,预测酒的分类
def knn_classifier():
wine_dataset=load_wine()
#random_state=0,每次生成的随机数不同
#x代表数据集,y代表分类标签
x_train,x_test,y_train,y_test=train_test_split(wine_dataset["data"],wine_dataset["target"],random_state=0)
#创建nkk分类模型
knn=KNeighborsClassifier(n_neighbors=4)
#用模型对数据进行拟合
knn.fit(x_train,y_train)
#测试模型得分
score=knn.score(x_test,y_test)
print(score)
score=knn.score(x_train,y_train)
print(score)
#使用模型完成预测
x_news=np.array([[13.2,2.77,2.51,18.5,96.6,1.04,2.55,0.57,1.47,6.2,1.05,3.33,820]])
prediction=knn.predict(x_news)
print(wine_dataset["target_names"][prediction])
#knn回归,根据身高,年龄预测体重
def knn_regress():
person_data={
"data":[[5,45],[5.11,26],[5.6,30],[5.9,34],[4.8,40],[5.8,36],[5.3,19],[5.8,28],[5.5,23],[5.6,32]],
"target":[[77],[47],[55],[59],[72],[60],[40],[60],[45],[58]]
}
knn=KNeighborsRegressor(n_neighbors=3)
knn.fit(person_data["data"],person_data["target"])
#测试模型得分
score=knn.score(person_data["data"],person_data["target"])
print(score)
x_news = np.array([[5.5, 38]])
pre=knn.predict(x_news)
print(pre)