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

机器学习案例——鸢尾花数据集分析    前几天把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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【转载】小小的公共库,大大的耦合,你痛过吗?

    【转载】小小的公共库,大大的耦合,你痛过吗?

    2021年11月21日
    59
  • linux删除文件夹命令「建议收藏」

    linux删除文件夹命令「建议收藏」1、删除html文件夹:rmhtml-r2、删除文件:rmfiles.txt-r3、新建:mkdirhtml

    2022年7月13日
    13
  • uniapp动态底部tabbar_微信小程序开发例子

    uniapp动态底部tabbar_微信小程序开发例子文章目录1.需求背景1.1源码下载2.问题前提及思路3.开始撸3.1设置`tabbar.js`配置不同角色不同的菜单3.2设置`page.json`3.3vue配置3.4tabBar组件代码3.5setRole方法1.需求背景公司要求开发一个小程序,要求二种不同权限的人群都可以使用,使用时根据不同的权限,获取不同的tabbar,以及展示对应不同的内容。登录页面分为用户登录及管理员登录1.2用户登录和管理员登录的tabbar根据账号角色进行对应展示1.1

    2025年8月3日
    4
  • java 生成中文字符乱码,java汉字乱码的原因与解决方法

    java 生成中文字符乱码,java汉字乱码的原因与解决方法在基于Java的编程中,经常会碰到汉字的处里及显示的问题,比如一大堆乱码或问号。这是因为JAVA中默认的编码方式是UNICODE,而中国人通常使用的文件和DB都是基于GB2312或者BIG5等编码,故会出现此问题。1、在网页中输出中文。JAVA在网络传输中使用的编码是”ISO-8859-1″,故在输出时需要进行转化,如:Stringstr=”中文”;str=newString(str.get…

    2022年7月8日
    32
  • ubuntu20.04内核降级_ubuntu20更新内核

    ubuntu20.04内核降级_ubuntu20更新内核Ubuntu20.04如何降低内核版本?如题,在不小心安装新内核之后,发现没办法降级(网上的各种方法最后结合信息摸索出了解决方案:首先,查看自己的grub版本:grub-install–version记住(GRUB)之后的大版本是2.00以后还是2.00以前查看自己现有的内核版本(完全版)grep’menuentry’/boot/grub/grub.cfg找到自己想换回的内核例如,这里我想要更换为5.8.0-50,就找到对应的选项,有menuentry’U

    2022年8月23日
    98
  • java applet介绍,Java Applet教程介绍[通俗易懂]

    java applet介绍,Java Applet教程介绍[通俗易懂]Applet是一种特殊类型的程序,嵌入在网页中以生成动态内容。它在浏览器中运行,并在客户端运行。小程序的优势小程序有很多优点。它们如下:它在客户端工作,因此响应时间更少。担保的它可以由在许多平台下运行的浏览器执行,包括Linux,Windows,MacOs等。小程序的缺点客户端浏览器需要插件才能执行applet。你知道吗小程序的层次结构如上图所示,Applet类扩展了Panel。…

    2022年7月7日
    18

发表回复

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

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