为什么做织梦网站时图片出不来,网站健设推广产品多少钱,湖北网站建设服务,做网站用到的工具1.1 KNN分类 KNN分类算法#xff08;K-Nearest-Neighbors Classification#xff09;#xff0c;又叫K近邻算法。它是概念极其简单#xff0c;而效果又很优秀的分类算法。1967年由Cover T和Hart P提出。 KNN分类算法的核心思想#xff1a;如果一个样本在特征空间中的k个最…1.1 KNN分类 KNN分类算法K-Nearest-Neighbors Classification又叫K近邻算法。它是概念极其简单而效果又很优秀的分类算法。1967年由Cover T和Hart P提出。 KNN分类算法的核心思想如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别则该样本也属于这个类别。 如图假设已经获取一些动物的特征且已知这些动物的类别。现在需要识别一只新动物判断它是哪类动物。首先找到与这个物体最接近的k个动物。假设k3则可以找到2只猫和1只狗。由于找到的结果中大多数是猫则把这个新动物划分为猫类。 KNN方法有三个核心要素:
1K值 如果k取值太小好处是近似误差会减小。但同时预测结果对近邻的样本点非常敏感仅由非常近的训练样本决定预测结果。使模型变得复杂容易过拟合。如果k值太大学习的近似误差会增大导致分类模糊即欠拟合。 下面举例看k值对预测结果的影响。对图5.2中的动物进行分类当k3时分类结果为“猫狗21”所以属于猫当k5时表决结果为“猫狗熊猫231”所以判断目标动物为狗。 那么K值到底怎么选取呢涉及到距离的度量问题。
2距离的度量 不同的距离所确定的近邻点不同。平面上比较常用的是欧式距离。此外还有曼哈顿距离、余弦距离、球面距离等。 可以得到距离如下所示 3.分类决策规则 分类结果的确定往往采用多数表决原则即由输入实例的k个最邻近的训练实例中的多数类决定输入实例的类别。
1.2 初识KNN——鸢尾花分类
1查看数据
SKlearn中的iris数据集有5个key分别如下
target_names : 分类名称包括setosa、versicolor和virginica类。data : 特征数据值。target分类150个。DESCR: 数据集的简介。feature_names: 特征名称。
【例】查看鸢尾花iris数据集。
#【例1.1】对鸢尾花iris数据集进行调用查看数据的各方面特征。
from sklearn.datasets import load_iris
iris_dataset load_iris()
#下面是查看数据的各项属性
print(数据集的Keys:\n,iris_dataset.keys()) #查看数据集的keys。
print(特征名:\n,iris_dataset[feature_names]) #查看数据集的特征名称
print(数据类型:\n,type(iris_dataset[data])) #查看数据类型
print(数据维度:\n,iris_dataset[data].shape) #查看数据的结构
print(前五条数据:\n{}.format(iris_dataset[data][:5])) #查看前5条数据
#查看分类信息
print(标记名:\n,iris_dataset[target_names])
print(标记类型:\n,type(iris_dataset[target]))
print(标记维度:\n,iris_dataset[target].shape)
print(标记值:\n,iris_dataset[target])
#查看数据集的简介
print(数据集简介\n,iris_dataset[DESCR][:20] \n.......) #数据集简介前20个字符
运行结果
数据集的Keys:dict_keys([data, target, target_names, DESCR, feature_names])
特征名:[sepal length (cm), sepal width (cm), petal length (cm), petal width (cm)]
数据类型:class numpy.ndarray
数据维度:(150, 4)
前五条数据:
[[5.1 3.5 1.4 0.2][4.9 3. 1.4 0.2][4.7 3.2 1.3 0.2][4.6 3.1 1.5 0.2][5. 3.6 1.4 0.2]]
标记名:[setosa versicolor virginica]
标记类型:class numpy.ndarray
标记维度:(150,)
标记值:[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2]
数据集简介Iris Plants Database
....... 2数据集拆分 使用train_test_split函数。train_test_split函数属于sklearn.model_selection类中的交叉验证功能能随机地将样本数据集合拆分成训练集和测试集。
【例】对iris数据集进行拆分并查看拆分结果。
#【例1.2】对iris数据集进行拆分并查看拆分结果。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris_dataset load_iris()
X_train, X_test, y_train, y_test train_test_split( iris_dataset[data], iris_dataset[target], random_state2)
print(X_train,X_train)
print(y_train,y_train)
print(X_test,X_test)
print(y_test,y_test)
print(X_train shape: {}.format(X_train.shape))
print(X_test shape: {}.format(X_test.shape))
运行结果
X_train [[5.5 2.3 4. 1.3][6.9 3.1 5.1 2.3][6. 2.9 4.5 1.5][6.2 2.9 4.3 1.3][6.8 3.2 5.9 2.3][5. 2.3 3.3 1. ][4.8 3.4 1.6 0.2][6.1 2.6 5.6 1.4][5.2 3.4 1.4 0.2][6.7 3.1 4.4 1.4][5.1 3.5 1.4 0.2][5.2 3.5 1.5 0.2][5.5 3.5 1.3 0.2][4.9 2.5 4.5 1.7][6.2 3.4 5.4 2.3][7.9 3.8 6.4 2. ][5.4 3.4 1.7 0.2][6.7 3.1 5.6 2.4][6.3 3.4 5.6 2.4][7.6 3. 6.6 2.1][6. 2.2 5. 1.5][4.3 3. 1.1 0.1][4.8 3.1 1.6 0.2][5.8 2.7 5.1 1.9][5.7 2.8 4.1 1.3][5.2 2.7 3.9 1.4][7.7 3. 6.1 2.3][6.3 2.7 4.9 1.8][6.1 2.8 4. 1.3][5.1 3.7 1.5 0.4][5.7 2.8 4.5 1.3][5.4 3.9 1.3 0.4][5.8 2.8 5.1 2.4][5.8 2.6 4. 1.2][5.1 2.5 3. 1.1][5.7 3.8 1.7 0.3][5.5 2.4 3.7 1. ][5.9 3. 4.2 1.5][6.7 3.1 4.7 1.5][7.7 2.8 6.7 2. ][4.9 3. 1.4 0.2][6.3 3.3 4.7 1.6][5.1 3.8 1.5 0.3][5.8 2.7 3.9 1.2][6.9 3.2 5.7 2.3][4.9 3.1 1.5 0.1][5. 2. 3.5 1. ][4.9 3.1 1.5 0.1][5. 3.5 1.3 0.3][5.4 3.7 1.5 0.2][6.8 3. 5.5 2.1][6.3 3.3 6. 2.5][5. 3.4 1.6 0.4][5.2 4.1 1.5 0.1][6.3 2.5 5. 1.9][7.7 2.6 6.9 2.3][6. 2.2 4. 1. ][7.2 3.6 6.1 2.5][4.9 2.4 3.3 1. ][6.1 2.8 4.7 1.2][6.5 3. 5.2 2. ][5.1 3.5 1.4 0.3][7.4 2.8 6.1 1.9][5.9 3. 5.1 1.8][6.4 2.7 5.3 1.9][4.4 2.9 1.4 0.2][5.6 2.8 4.9 2. ][5.1 3.4 1.5 0.2][5. 3.3 1.4 0.2][5.7 2.6 3.5 1. ][6.9 3.1 5.4 2.1][5.5 2.6 4.4 1.2][6.3 2.8 5.1 1.5][7. 3.2 4.7 1.4][6.8 2.8 4.8 1.4][6.5 3.2 5.1 2. ][6.9 3.1 4.9 1.5][5.5 2.4 3.8 1.1][5.6 3. 4.5 1.5][6. 3. 4.8 1.8][6. 2.7 5.1 1.6][5.8 2.7 5.1 1.9][5.9 3.2 4.8 1.8][5.1 3.8 1.6 0.2][6.2 2.2 4.5 1.5][5.6 3. 4.1 1.3][5.6 2.5 3.9 1.1][5.8 2.7 4.1 1. ][6.4 3.1 5.5 1.8][6.6 2.9 4.6 1.3][5.5 4.2 1.4 0.2][4.4 3. 1.3 0.2][6.3 2.9 5.6 1.8][6.4 3.2 4.5 1.5][7.3 2.9 6.3 1.8][5. 3.6 1.4 0.2][7.1 3. 5.9 2.1][4.9 3.1 1.5 0.1][6.5 3. 5.5 1.8][6.7 3.3 5.7 2.1][5.4 3.4 1.5 0.4][6.1 2.9 4.7 1.4][4.6 3.2 1.4 0.2][6.7 3. 5.2 2.3][5.7 3. 4.2 1.2][5. 3.4 1.5 0.2][6.5 3. 5.8 2.2][6.6 3. 4.4 1.4][5. 3.5 1.6 0.6][4.6 3.6 1. 0.2][6.3 2.5 4.9 1.5][5.7 4.4 1.5 0.4]]
y_train [1 2 1 1 2 1 0 2 0 1 0 0 0 2 2 2 0 2 2 2 2 0 0 2 1 1 2 2 1 0 1 0 2 1 1 0 11 1 2 0 1 0 1 2 0 1 0 0 0 2 2 0 0 2 2 1 2 1 1 2 0 2 2 2 0 2 0 0 1 2 1 2 11 2 1 1 1 2 1 2 1 0 1 1 1 1 2 1 0 0 2 1 2 0 2 0 2 2 0 1 0 2 1 0 2 1 0 0 10]
X_test [[4.6 3.4 1.4 0.3][4.6 3.1 1.5 0.2][5.7 2.5 5. 2. ][4.8 3. 1.4 0.1][4.8 3.4 1.9 0.2][7.2 3. 5.8 1.6][5. 3. 1.6 0.2][6.7 2.5 5.8 1.8][6.4 2.8 5.6 2.1][4.8 3. 1.4 0.3][5.3 3.7 1.5 0.2][4.4 3.2 1.3 0.2][5. 3.2 1.2 0.2][5.4 3.9 1.7 0.4][6. 3.4 4.5 1.6][6.5 2.8 4.6 1.5][4.5 2.3 1.3 0.3][5.7 2.9 4.2 1.3][6.7 3.3 5.7 2.5][5.5 2.5 4. 1.3][6.7 3. 5. 1.7][6.4 2.9 4.3 1.3][6.4 3.2 5.3 2.3][5.6 2.7 4.2 1.3][6.3 2.3 4.4 1.3][4.7 3.2 1.6 0.2][4.7 3.2 1.3 0.2][6.1 3. 4.9 1.8][5.1 3.8 1.9 0.4][7.2 3.2 6. 1.8][6.2 2.8 4.8 1.8][5.1 3.3 1.7 0.5][5.6 2.9 3.6 1.3][7.7 3.8 6.7 2.2][5.4 3. 4.5 1.5][5.8 4. 1.2 0.2][6.4 2.8 5.6 2.2][6.1 3. 4.6 1.4]]
y_test [0 0 2 0 0 2 0 2 2 0 0 0 0 0 1 1 0 1 2 1 1 1 2 1 1 0 0 2 0 2 2 0 1 2 1 0 21]
X_train shape: (112, 4)
X_test shape: (38, 4)
3使用散点矩阵查看数据特征关系 在数据分析中同时观察一组变量的散点图是很有意义的这也被称为散点图矩阵scatter plot matrix。创建这样的图表工作量巨大可以使用scatter_matrix函数。scatter_matrix函数是Pandas提供了一个能从DataFrame创建散点图矩阵的函数。
【例】对鸢尾花数据结果使用scatter_matrix显示训练集与测试集的散点图矩阵。
#【例5.3】使用scatter_matrix显示训练集与测试集。
import pandas as pd
iris_dataframe pd.DataFrame(X_train, columnsiris_dataset.feature_names)
# 创建一个scatter matrix颜色值来自y_train
pd.plotting.scatter_matrix(iris_dataframe, cy_train, figsize(15, 15), markero, hist_kwds{bins: 20}, s60, alpha.8)运行结果 4建立KNN模型 在Python中实现KNN方法使用的是KNeighborsClassifier类KNeighborsClassifier类属于Scikit-learn的neighbors包。
核心操作包括以下三步
创建KNeighborsClassifier对象并进行初始化调用fit()方法对数据集进行训练调用predict()函数对测试集进行预测
使用KNN对鸢尾花iris数据集进行分类的完整代码如下
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
#导入鸢尾花数据并查看数据特征
iris datasets.load_iris()
print(数据集结构,iris.data.shape)
# 获取属性
iris_X iris.data
# 获取类别
iris_y iris.target
# 划分成测试集和训练集
iris_train_X,iris_test_X,iris_train_y,iris_test_ytrain_test_split(iris_X,iris_y,test_size0.2, random_state0)
#分类器初始化
knn KNeighborsClassifier()
#对训练集进行训练
knn.fit(iris_train_X, iris_train_y)
#对测试集数据的鸢尾花类型进行预测
predict_result knn.predict(iris_test_X)
print(测试集大小,iris_test_X.shape)
print(真实结果,iris_test_y)
print(预测结果,predict_result)
#显示预测精确率
print(预测精确率,knn.score(iris_test_X, iris_test_y))
运行结果
数据集结构 (150, 4)
测试集大小 (30, 4)
真实结果 [2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0]
预测结果 [2 1 0 2 0 2 0 1 1 1 2 1 1 1 2 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0]
预测精确率 0.9666666666666667