KNN算法实例(酒的分类)【机器学习算法一KNN4】

1.代码

  1. 未画图
from sklearn.datasets import load_wine
wine=load_wine()#Bunch对象,包含键和数值

print("=========================================")
print("红酒数据集中的键:
{}".format(wine.keys()))
print("数据概况:{}".format(wine[data].shape))
print(wine[DESCR])#数据集描述
print("=========================================
")

from sklearn.model_selection import train_test_split
#默认情况下,75%数据作为训练集,25%数据作为测试集,random_state指定伪随机数供数据集拆分(=0每次伪随机数不同)
X_train,X_test,y_train,y_test=train_test_split(wine[data],wine[target],random_state=0)

print("=========================================")
print(Shape
X_train:{}, X_test:{}, y_train:{}, y_test:{}
.format(X_train.shape, X_test.shape, y_train.shape, y_test.shape))
print("X_train:",X_train,"
y_train:",y_train)
print("=========================================
")

from sklearn.neighbors import KNeighborsClassifier
clf=KNeighborsClassifier(n_neighbors=15, weights=distance)
clf.fit(X_train,y_train)

print("=========================================")
print(测试集模型评分:{:.2f}.format(clf.score(X_test, y_test)))
print(训练集模型评分:{:.2f}.format(clf.score(X_train, y_train)))
print("=========================================
")

import numpy as np
X_new=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=clf.predict(X_new)
print("=========================================")
print("新酒类别:{}".format(wine[target_names][prediction]))
print("=========================================
")
  1. 画图
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
#定义图像中分区的颜色和散点的颜色
cmap_light = ListedColormap([#FFAAAA, #AAFFAA, #AAAAFF])
cmap_bold = ListedColormap([#FF0000, #00FF00, #0000FF])

#分别用样本的两个特征值创建图像和横轴和纵轴
X = wine.data[:,:2]
y = wine.target
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=0)
clf.fit(X_train, y_train)#重新训练
x_min, x_max = X_train[:, 0].min() - 1, X_train[:, 0].max() + 1
y_min, y_max = X_train[:, 1].min() - 1, X_train[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, .02),np.arange(y_min, y_max, .02))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
#给每个分类中的样本分配不同的颜色
Z = Z.reshape(xx.shape)
plt.figure()
plt.pcolormesh(xx, yy, Z, cmap=cmap_light)
#用散点把样本表示出来
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=cmap_bold, edgecolor=k, s=20)
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.title("Classifier:(k = 15, weights = distance)")
plt.scatter(13.2, 2.77, marker=*, s=80)
plt.show()

2.运行结果

  1. 未画图
  2. 画图

3.知识点

    加载并返回wine数据集(分类) wine数据集是一个经典的、非常简单的多分类数据集。
名称 说明 类 3 每类样本数 [59,71,48] 样本总数 178 维数 13 特征 real, positive
    sklearn.datasets.load_wine(return_X_y=False) 参数:return_X_y : boolean, default=False. 如果为真,返回(data, target)而不是Bunch堆对象。 返回: data : Bunch 类似于字典的对象,有趣的属性有:“data”——要学习的数据、“target”——分类标签、“target_names”——标签的含义、“feature_names”——特征的含义,以及“DESCR”——数据集的完整描述。 (data, target) : tuple if return_X_y is True 一个例子:样本10,80,140的类别及类名
经验分享 程序员 微信小程序 职场和发展