机器学习案例——鸢尾花数据集分析

机器学习案例——鸢尾花数据集分析    前几天把python基础知识过了一遍,拿了这个小例子作为练手项目,这个案例也有师兄的帮助,记录完,发现代码贴的很多,文章有点长,为了节省篇幅,有一些说明就去掉了,毕竟鸢尾花数据集比较经典,网上能找到很多和我差不多的案例。还有就是发现一个新的markdown排版工具,今天想试试效果。数据来源    首先说一下,该数据集来源于网络。Iris也称鸢尾花卉数据集,是一类多重变量分析的数……

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

    前几天把python基础知识过了一遍,拿了这个小例子作为练手项目,这个案例也有师兄的帮助,记录完,发现代码贴的很多,文章有点长,为了节省篇幅,有一些说明就去掉了,毕竟鸢尾花数据集比较经典,网上能找到很多和我差不多的案例。还有就是发现一个新的markdown排版工具,今天想试试效果。

数据来源

    首先说一下,该数据集来源于网络。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。数据来源:http://archive.ics.uci.edu/ml/datasets/Iris

    先搜了一下,什么是花瓣和花萼,小小科普。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MiqxQnQ6-1601307500587)(https://github.com/mengxiaoxu/mengxiaoxu.github.io/raw/master/_posts/images/机器学习/花瓣花萼.png)]

数据简单处理

import pandas as pd

# 读入数据
df = pd.read_csv('iris/iris.csv')

''' 数据时以逗号为分隔符的, 但是这个数据没有列的名字, 所以先给每个列取个名字, 直接使用数据说明中的描述 '''
df.columns = ['sepal_len', 'sepal_width', 'petal_len', 'petal_width', 'class']

# 查看前5条数据
df.head()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H5K45l0Q-1601307500592)(https://github.com/mengxiaoxu/mengxiaoxu.github.io/raw/master/_posts/images/机器学习/数据前5行.png)]

''' 最后类别一列,感觉前面的'Iris-'有点多余 即把class这一列的数据按'-'进行切分 取切分后的第二个数据,为了好看一点点 '''
df['class'] = df['class'].apply(lambda x: x.split('-')[1]) 

# 查看数据信息
df.describe()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YpZ6MoBL-1601307500594)(https://github.com/mengxiaoxu/mengxiaoxu.github.io/raw/master/_posts/images/机器学习/数据描述.png)]

    使用describe()可以很方便的查看数据的大致信息,可以看到数据是没有缺失值的,总共有145条,每一列的最大值、最小值、平均值都可以查看。

数据可视化

    为了比较直观的查看数据的分布,用matplotlib进行了简单的可视化展示,查看数据的分布,画个图。

import numpy as np

import matplotlib.pyplot as plt
import matplotlib.cm as cm
%matplotlib inline

def scatter_plot_by_category(feat, x, y):
    alpha = 0.5
    gs = df.groupby(feat)
    cs = cm.rainbow(np.linspace(0, 1, len(gs)))
    for g, c in zip(gs, cs):
        plt.scatter(g[1][x], g[1][y], color=c, alpha=alpha)

plt.figure(figsize=(20,5))

plt.subplot(131)
scatter_plot_by_category('class', 'sepal_len', 'petal_len')
plt.xlabel('sepal_len')
plt.ylabel('petal_len')
plt.title('class')

# 为了节省篇幅,省了第二、三个图的代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vfob0y8d-1601307500596)(https://github.com/mengxiaoxu/mengxiaoxu.github.io/raw/master/_posts/images/机器学习/散点图.png)]

import seaborn as sb

plt.figure(figsize=(20, 10))
for column_index, column in enumerate(df.columns):
    if column == 'class':
        continue
    plt.subplot(2, 2, column_index + 1)
    sb.violinplot(x='class', y=column, data=df)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DDu1vkwM-1601307500597)(https://github.com/mengxiaoxu/mengxiaoxu.github.io/raw/master/_posts/images/机器学习/花花.png)]

模型训练

    因为鸢尾花数据集很简单,特征已经全部提取好了,而且也很纯,所以就直接放到机器学习算法里面训练了。这里使用的是决策树分类算法。

# 首先对数据进行切分,即分出数据集和测试集
from sklearn.cross_validation import train_test_split

all_inputs = df[['sepal_len', 'sepal_width',
                             'petal_len', 'petal_width']].values
all_classes = df['class'].values

(X_train,
 X_test,
 X_train,
 Y_test) = train_test_split(all_inputs, all_classes, train_size=0.8, random_state=1)
 

# 使用决策树算法进行训练
from sklearn.tree import DecisionTreeClassifier

# 定义一个决策树对象
decision_tree_classifier = DecisionTreeClassifier()

# 训练模型
model = decision_tree_classifier.fit(training_inputs, training_classes)

# 所得模型的准确性
print(decision_tree_classifier.score(testing_inputs, testing_classes))

# 使用训练的模型进行预测,为了偷懒,
# 直接把测试集里面的数据拿出来了三条
print(X_test[0:3])
print(Y_test[0:3])
model.predict(X_test[0:3])

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YELyroAm-1601307500598)(https://github.com/mengxiaoxu/mengxiaoxu.github.io/raw/master/_posts/images/机器学习/预测.png)]

    可以看到效果还是不错,在测试集上的准确率达到了97%。网上还有人提供了一个可视化工具Graph Visualization(http://www.graphviz.org/),可以利用它把构建的决策树模型直观的展示出来,这里不展示了,代码贴太多了,文章太长了。

写在最后

    推荐一个课程,是吴恩达在网易云课堂开设的微专业——深度学习工程师课程,我学了几天了,讲的比较清晰,而且是免费的,现在我已经学完第二周的课时了,后面打算把自己的学习笔记也发出来一起交流。
课程地址:http://mooc.study.163.com/smartSpec/detail/1001319001.htm

推荐阅读:

一个诗意的女孩——西凉忆

python小结,再谈谈对学习的理解

从具体案例了解知识图谱构建流程

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186300.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 简单好用的mac版Mysql可视化工具 – Sequel Pro

    简单好用的mac版Mysql可视化工具 – Sequel ProSequelPro 下载地址 http www pc6 com mac 133145 html 链接配置截图

    2025年12月4日
    3
  • pytest报错_eclipse提交代码到git

    pytest报错_eclipse提交代码到git前言我们每天写完自动化用例后都会提交到git仓库,随着用例的增多,为了保证仓库代码的干净,当有用例新增的时候,我们希望只运行新增的未提交git仓库的用例。pytest-picked插件可以

    2022年7月29日
    6
  • Django 安装_docker安装redis

    Django 安装_docker安装redis安装redis1.使用Homebrew安装Redisbrewinstallredis执行上述命令后出现以下内容,则成功安装Downloadfailed:https://mirrors.

    2022年7月29日
    12
  • WebStorm提示代码快捷键[通俗易懂]

    WebStorm提示代码快捷键[通俗易懂]刚开始用WebStorm,发现默认的提示功能Ctrl+space代码提示无效,修改为Alt+/。File—>Settings(Ctrl+Alt+s)—>Keymap添加快捷键时(这里以Alt+斜杠为例),直接按住Alt和斜杠键即可(不是手打字符上去的)。在需要提示的位置Alt+/ 就会出现提示代码。群中更多更全,加群获取下载。…

    2022年6月13日
    51
  • 网页升级中每天自动更新什么意思_快照搜索

    网页升级中每天自动更新什么意思_快照搜索网站被收录是百度蜘蛛爬行、记录、筛选的结果。网站被爬行后会在搜索引擎数据库中留下数据,当判断收录的内容达到用户要求质量时,网站的快照才会被释放出来,而快照的时候很多时候都是最初的爬行时间。这也是我们很多站长发现被收录后,快照时间不是当天时间的原因了。  在我们的认知中,每次百度快照的更新都是搜素引擎对网站数据的一次爬行收录过程,也就意味着更新就会带来网站排名的微调动。所以,更多时候

    2022年9月1日
    4
  • 程序员必知的8大排序(三)——-冒泡排序,快速排序(java实现)

    程序员必知的8大排序(三)——-冒泡排序,快速排序(java实现)接上一篇:程序员必知的8大排序(二)——-简单选择排序,堆排序(java实现) 5.冒泡排序(1)基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。(2)实例:(3)用java实现publicclass

    2022年6月22日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号