当前位置:   article > 正文

机器学习 鸢尾花分类的原理和实现(三)_机器学习鸢尾花的研究起源

机器学习鸢尾花的研究起源

前言:鸢尾花数据集是机器学习中的经典小规模数据集。通过如下实验,查阅资料和视频进行学习,将整个实验的学习心得和实验过程作出分享,希望对喜爱机器学习并入门的新手提供帮助,同时也鞭策自己稳步向前。

本文主要从“实验前期的基本功课,实验过程的重要实现,实验结束的学习总结”三部分进行编写,限于文章篇幅,后续内容将在后边的博文中更新,大家可自行对应阅读:

(如有疑问,请点击这里跳转至本专栏查看前两篇博文)

(二)实验过程的重要实现:

KNN算法API: 官方说明请点击这里进入,不过都是英文,推荐一篇博客,点击这里进入,比较直观清晰,以下部分也是摘自这篇博客,整理,修改和归纳后如下:

KNeighborsClassifier参数说明:

KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None, **kwargs)
# 解释说明:
n_neighbors:所选用的近邻数,相当于K。
weights的参数设置:
- uniform:同一的权重,即每个邻域中的所有点都是平均加权的。
- distance:这种情况下,距离越近权重越大,反之,距离越远其权重越小。
- [callable](可调用):用户定义的函数,它接受一个距离数组,并返回一个包含权重的相同形状的数组。
algorithm :用于计算最近邻居的算法,。有{auto, ball_tree, kd_tree, brute}。
- auto :根据样本数据自动刷选合适的算法,判断维数(特征值)是否大于20,小于20用kd_tree,大于20用ball_tree,如果数据集特别简单,用brute一个个检索就可以了。
- ball_tree:构建“球树”算法模型,超球体分割。
- kd_tree:“kd树”算法,超平面分割。
- brute:使用蛮力搜索,即或相当于Knn算法,需遍历所有样本数据与目标数据的距离,进而按升序排序从而选取最近的K个值,采用投票得出结果。
leaf_size:叶的大小,针对算法为球树或KD树而言。这个设置会影响构造和查询的速度,以及存储树所需的内存。最优值取决于问题的性质。
p:Minkowski度量参数的参数来自sklearn.emeics.pairwise.pairwise_距离。当p=1时,这等价于使用曼哈顿距离(L1),欧几里得距离(L2)等价于p=2时,对于任意的p,则使用Minkowski_距离(L_P)。
metric:用于树的距离度量。默认度量是Minkowski,p=2等价于标准的欧几里德度量。有关可用度量的列表,可以查阅距离度量类的文档。如果度量是“预先计算的”,则假定X是距离矩阵,在拟合期间必须是平方。
metric_params:度量函数的附加关键字参数,设置应为dict(字典)形式。
n_jobs:要为邻居搜索的并行作业的数量。None指1,除非在 joblib.parallel_backend背景。-1意味着使用所有处理器,若要了解相关的知识应该具体查找一下。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

在这里插入图片描述
回顾鸢尾花数据集:

实例数量:150个(三个种类各有50个)
属性数量:4(数值型,数值型,帮助预测的属性和类)
Attribute Information:
- sepal length:萼片长度(cm)
- sepal width:萼片宽度(cm)
- petal lengh:花瓣长度(cm)
- petal width:花瓣宽度(cm)
Class:
- Iriss-Setosa:山鸢尾
- Iris-Versicolour:变色鸢尾
- Iris-Virginica:维吉尼亚鸢尾
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

步骤分析:

- 获取数据集
- 数据基本处理
- 特征工程
- 机器学习(模型训练)
- 模型评估
  • 1
  • 2
  • 3
  • 4
  • 5

下边采用的数据集是sklearn中自带的鸢尾花数据集:

核心代码:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
# - 获取数据集
iris=load_iris()
# - 数据基本处理
# 数据分割,处理数据的异常值,由于数据很标准,只做分割处理
x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,random_state=22,test_size=0.2)
# - 特征工程
# 实例化一个转换器
transfer=StandardScaler()
x_train=transfer.fit_transform(x_train)
x_test=transfer.fit_transform(x_test)
# - 机器学习(模型训练)
# 实例化一个估计器
estimator=KNeighborsClassifier(n_neighbors=5)
# 进行模型训练
estimator.fit(x_train,y_train)
# - 模型评估
# 输出预测值
y_pre=estimator.predict(x_test)
print("对测试集目标值的预测为:\n",y_pre)
print("对测试集的预测值和本身的真实值对比:\n",y_pre==y_test)
# 输出准确率
ret=estimator.score(x_test,y_test)
print("预测的成功率为:",ret)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

实现效果:

在这里插入图片描述


在上述实验的基础上进行改进,采用逻辑回归(后期详细更新)的方法,即本次实验的过程:

初步了解:

逻辑回归初步认知:点击此处进入
在scikit-learn中,与逻辑回归有关的类库的使用:点击此处查看
scikit-learn官方文档:点击此处进入

实验代码:

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score # 模型评估
iris = load_iris()  # 读入数据集
# 分割数据集为训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=0)
# 配置并实例化逻辑回归分类器
logreg = LogisticRegression(C=1e5, solver='lbfgs', multi_class="multinomial",max_iter=3000)
# 调用fit(x,y)来训练模型,其中x为训练集的特征值,y为训练集的目标值。
logreg.fit(x_train, y_train)
# 利用训练好的模型对测试集进行预测,返回预测的目标值数组
y_predict = logreg.predict(x_test)
print("测试集中真实的目标值为:\n",y_test)
print("测试集中预测的目标值为:\n",y_predict)
print("对测试集的预测值和本身的真实值对比:\n",y_predict==y_test)
print("预测的成功率为:",accuracy_score(y_test, y_predict))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

运行结果:

在这里插入图片描述

(二)实验结束的学习总结:

实验过程可按顺序参考前两篇博文:机器学习 鸢尾花分类的原理和实现(一)机器学习 鸢尾花分类的原理和实现(二)
推荐几篇写的不错的文章作为总结:
L1和L2正则化讲解 文章推荐:
l1正则与l2正则的特点是什么,各有什么优势?
机器学习中的范数规则化之(一)L0、L1与L2范数
一文搞懂深度学习正则化的L2范数
逻辑回归讲解推荐(知乎):机器学习 | 逻辑回归算法(二)LogisticRegression

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/748531
推荐阅读
相关标签
  

闽ICP备14008679号