大型行业门户网站开发建设方案,wordpress右侧的工具栏,wordpress+三主题公园,重庆工程网站建设案例简介#xff1a;有178个红酒样本#xff0c;每一款红酒含有13项特征参数#xff0c;如镁、脯氨酸含量#xff0c;红酒根据这些特征参数被分成3类。要求是任意输入一组红酒的特征参数#xff0c;模型需预测出该红酒属于哪一类。 1. K近邻算法介绍
1.1 算法原理 原理有178个红酒样本每一款红酒含有13项特征参数如镁、脯氨酸含量红酒根据这些特征参数被分成3类。要求是任意输入一组红酒的特征参数模型需预测出该红酒属于哪一类。 1. K近邻算法介绍
1.1 算法原理 原理如果一个样本在特征空间中的k个最相似即特征空间中最邻近的样本中的大多数属于某一个类别那么该样本也属于这个类别。简单来说就是求两点之间的距离看距离谁是最近的以此来区分我们要预测的这个数据是属于哪个分类。 我们看图来理解一下。蓝色点是属于a类型的样本点粉色点是属于b类型的样本点。此时新来了一个点黄色点怎么判断是属于它是a类型还是b类型呢。 方法是新点找距离自身最近的k个点k可变。分别计算新点到其他各个点的距离按距离从小到大排序找出距离自身最近的k个点。统计在这k个点中有多少点属于a类有多少点属于b类。在这k个点中如果属于b类的点更多那么这个新点也属于b分类。距离计算公式也是我们熟悉的勾股定理。 1.2 算法优缺点
算法优点简单易理解、无需估计参数、无需训练。适用于几千-几万的数据量。
算法缺点对测试样本计算时的计算量大内存开销大k值要不断地调整来达到最优效果。k值取太小容易受到异常点的影响k值取太多产生过拟合影响准确性。 2. 红酒数据集
2.1 数据集获取方式 红酒数据集是Scikit-learn库中自带的数据集我们只需要直接调用它然后打乱它的顺序来进行我们自己的分类预测。首先我们导入Scikit-learn库如果大家使用的是anaconda的话这个库中的数据集都是提前安装好了的我们只需要调用它即可。
找不到这个数据集的我把红酒数据集连接放在文末了有需要的自取。
Scikit-learn数据集获取方法
1用于获取小规模数据集数据集已在系统中安装好了的
sklearn.datasets.load_数据名()
from sklearn import datasets
#系统中已有的波士顿房价数据集
boston datasets.load_boston() 2远程获取大规模数据集安装到本地data_home默认是位置是/scikit_learn_data/
sklearn.datasets.fetch_数据名(data_home 数据集下载目录)
# 20年的新闻数据下载到
datasets.fetch_20newsgroups(data_home ./newsgroups.csv) #指定文件位置这两种方法返回的数据是 .Bunch类型它有如下属性
data特征数据二维数组相当于x变量 target标签数组相当于y变量 DESCR数据描述 feature_names特征名。新闻数据、手写数据、回归数据没有 target_name标签名。回归数据没有
想知道还能获取哪些数据集的同学可去下面这个网址查看具体操作
https://sklearn.apachecn.org/#/docs/master/47 2.2 获取红酒数据 首先导入sklearn的本地数据集库变量wine获取红酒数据由于wine接收的返回值是.Bunch类型的数据因此我用win_data接收所有特征值数据它是178行13列的数组每一列代表一种特征。win_target用来接收所有的目标值本数据集中的目标值为0、1、2三类红酒。如果大家想更仔细的观察这个数据集可以通过wine.DESCR来看这个数据集的具体描述。 然后把我们需要的数据转换成DataFrame类型的数据。为了使预测更具有一般性我们把这个数据集打乱。操作如下
from sklearn import datasets
wine datasets.load_wine() # 获取葡萄酒数据
wine_data wine.data #获取葡萄酒的索引data数据178行13列
wine_target wine.target #获取分类目标值# 将数据转换成DataFrame类型
wine_data pd.DataFrame(data wine_data)
wine_target pd.DataFrame(data wine_target)# 将wine_target插入到第一列并给这一列的列索引取名为class
wine_data.insert(0,class,wine_target)# 1 变量.sample(frac1) 表示洗牌重新排序
# 2 变量.reset_index(dropTrue) 使index从0开始排序wine wine_data.sample(frac1).reset_index(dropTrue) #把DataFrame的行顺序打乱我们取出最后10行数据用作后续的验证预测结果是否正确这10组数据分出特征值相当于x和目标值相当于y。剩下的数据也分出特征值features和目标值targets用于模型训练。剩下的数据中还要划分出训练集和测试集下面再详述。到此数据处理这块完成。
#取后10行用作最后的预测结果检验。并且让index从0开始也可以不写.reset_index(dropTrue)
wine_predict wine[-10:].reset_index(dropTrue)
# 让特征值等于去除class后的数据
wine_predict_feature wine_predict.drop(class,axis1)
# 让目标值等于class这一列
wine_predict_target wine_predict[class]wine wine[:-10] #去除后10行
features wine.drop(columns[class],axis1) #删除class这一列产生返回值
targets wine[class] #class这一列就是目标值3. 红酒分类预测
3.1 划分测试集和训练集
一般采用75%的数据用于训练25%用于测试因此在数据进行预测之前先要对数据划分。
划分方式
使用sklearn.model_selection.train_test_split 模块进行数据分割。
x_train,x_test,y_train,y_test train_test_split(x, y, test_size数据占比)
train_test_split() 括号内的参数x数据集特征值(features) y数据集目标值(targets) test_size 测试数据占比用小数表示如0.25表示75%训练train25%测试test。
train_test_split() 的返回值x_train训练部分特征值 x_test: 测试部分特征值 y_train训练部分目标值 y_test: 测试部分目标值
# 划分测试集和训练集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test train_test_split(features,targets,test_size0.25)3.2 数据标准化 由于不同数据的单位不同数据间的跨度较大对结果影响较大因此需要进行数据缩放例如归一化和标准化。考虑到归一化的缺点如果异常值较多最大值和最小值间的差值较大会造成很大影响。我采用数据标准化的方法采用方差标准差使标准化后的数据均值为0标准差为1使数据满足标准正态分布。
# 先标准化再预测
from sklearn.preprocessing import StandardScaler #导入标准化缩放方法
scaler StandardScaler() #变量scaler接收标准化方法
# 传入特征值进行标准化
# 对训练的特征值标准化
x_train scaler.fit_transform(x_train)
# 对测试的特征值标准化
x_test scaler.fit_transform(x_test)
# 对验证结果的特征值标准化
wine_predict_feature scaler.fit_transform(wine_predict_feature) 3.3 K近邻预测分类
使用sklearn实现k近邻算法
from sklearn.neighbors import KNeighborsClassifier
KNeighborsClassifier(n_neighbors 邻居数,algorithm 计算最近邻居算法)
.fit(x_trainy_train)
KNeighborsClassifier() 括号内的参数
n_neighborsint类型默认是5可以自己更改。找出离自身最近的k个点
algorithm用于计算最近邻居的算法。有ball_tree、kd_tree、auto。默认是auto根据传递给fit()方法的值来决定最合适的算法自动选择前两个方法中的一个。
from sklearn.neighbors import KNeighborsClassifier #导入k近邻算法库
# k近邻函数
knn KNeighborsClassifier(n_neighbors5,algorithmauto)
# 把训练的特征值和训练的目标值传进去
knn.fit(x_train,y_train)将训练所需的特征值和目标值传入.fit()方法之后即可开始预测。首先利用.score()评分法输入用于测试的特征值和目标值来看一下这个模型的准确率是多少是否是满足要求再使用.predict()方法预测所需要的目标值。
评分法根据x_test预测结果把结果和真实的y_test比较计算准确率
.score(x_test, y_test)
预测方法
.predict(用于预测的特征值)
# 评分法计算准确率
accuracy knn.score(x_test,y_test)
# 预测输入预测用的x值
result knn.predict(wine_predict_feature)accuracy存放准确率result存放预测结果最终准确率为0.952最终的分类结果和wine_predict_target存放的实际分类结果有微小偏差。 完整代码如下
import pandas as pd
from sklearn import datasetswine datasets.load_wine() # 获取葡萄酒数据
wine_data wine.data #获取葡萄酒的索引data数据178行13列
wine_target wine.target #获取分类目标值wine_data pd.DataFrame(data wine_data) #转换成DataFrame类型数据
wine_target pd.DataFrame(data wine_target)
# 将target插入到第一列
wine_data.insert(0,class,wine_target)# 1 变量.sample(frac1) 表示洗牌重新排序
# 2 变量.reset_index(dropTrue) 使index从0开始排序可以省略这一步
wine wine_data.sample(frac1).reset_index(dropTrue)# 拿10行出来作验证
wine_predict wine[-10:].reset_index(dropTrue)
wine_predict_feature wine_predict.drop(class,axis1) #用于验证的特征值输入到predict()函数中
wine_predict_target wine_predict[class] #目标值用于和最终预测结果比较wine wine[:-10] #删除后10行
features wine.drop(columns[class],axis1) #删除class这一列产生返回值这个是特征值
targets wine[class] #class这一列就是目标值
# 相当于13个特征值对应1个目标# 划分测试集和训练集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test train_test_split(features,targets,test_size0.25)# 先标准化再预测
from sklearn.preprocessing import StandardScaler #导入标准化缩放方法
scaler StandardScaler() #变量scaler接收标准化方法# 传入特征值进行标准化
x_train scaler.fit_transform(x_train) #对训练的特征值标准化
x_test scaler.fit_transform(x_test) #对测试的特征值标准化
wine_predict_feature scaler.fit_transform(wine_predict_feature)# 使用K近邻算法分类
from sklearn.neighbors import KNeighborsClassifier #导入k近邻算法库
# k近邻函数
knn KNeighborsClassifier(n_neighbors5,algorithmauto)# 训练把训练的特征值和训练的目标值传进去
knn.fit(x_train,y_train)
# 检测模型正确率--传入测试的特征值和目标值
# 评分法根据x_test预测结果把结果和真实的y_test比较计算准确率
accuracy knn.score(x_test,y_test)
# 预测输入预测用的x值
result knn.predict(wine_predict_feature)