当前位置:首页 > 编程 > Python > 正文内容

机器学习入门

七星2个月前 (09-08)Python104

啥是机器学习? 有啥用?

    用官方的话说, 就是, 他是一门什么多领域交叉学科, 吧啦吧啦的一堆, 最后就说了一句话:

它主要使用归纳,综合, 而不是演绎.

怎么理解这句话呢, 我个人理解就是:

    通过给定的一大堆有用的没用的数据, 然后通过一些方法(算法), 训练得到一堆机器能看懂的东西(训练好的模型), 

当有新的数据需要分类时, 可以利用训练好的模型, 对新的数据进行概率性的预测.

可能有些人还是不太理解这个东西. 那么就通过简单的代码, 复现这一过程.


鸢尾花的分类

现实生活中, 鸢尾花的种类有三种:

山鸢尾花, 变色鸢尾花, 维吉妮亚鸢尾花

区分他们不同的指标主要就是花萼的长宽, 花瓣的长宽, 这四个数据.

换句话说, 就是, 假如知道了这四个数据, 就能大概率的推测出这个数据属于哪一类的鸢尾花.


那么, 我们开始干活. 首先

需要拿到一大堆数据. 而Python中的sklearn包中, 自带了这些数据, 我们来瞅瞅这些数据长什么样.


在使用机器学习的包(sklearn)之前, 首先要使用Python的包管理工具pip来下载这个包. 所以我们直接在dos里使用命令

pip install sklearn来安装,由于我们使用的python是3.x版本, 所以我们指定使用python3的pip来安装:

python3 -m pip install sklearn


然后, 开始写代码, 导入刚刚下载来的包里面的鸢尾花数据:

from sklearn.datasets import load_iris

导入之后, 我们的项目中就有这个包了, 我们拿个变量来接收一下这些数据:

iris = load_iris()

然后, 我们看看我们接收来的数据里面都有些啥:

print(iris)

代码:


执行:


可以看到, 存的是个字典, 字典的第一个key就是data段, data里面的值就是鸢尾花的四个特征值. 再往下看:


字典的第二个key是target(标签), 也就是鸢尾花的三个种类, 只不过, 把三个种类分别用0,1,2代替了, 这里的一堆数字, 与data中的值, 一一对应, 也就是说, 

前面data中的特征对应鸢尾花的种类.就比如:data的第一组数据:

[5.1, 3.5, 1.4, 0.2]

他对应的target的第一个值是0, 所以他属于第一种鸢尾花

接着往下:

target_name, 顾名思义, 就是标签的名字, 也就是0,1,2对应的具体种类.

好了, 数据我们拿到了, 现在我们要开始机器学习, 学习前, 需要对数据进行处理, 所以我们要先把用的到的数据拿出来

这里我们主要用到的就是data和target,于是:

data = iris.data
target = iris.target

就拿出来了:


执行:

可以看见, 只剩下data和target了.


好了, 我们现在可以拿着他们进行机器学习了


但是在学习后, 我们需要知道, 电脑到底学的好不好, 所以我们需要把样本数据, 随机拿出来一大部分去训练, 剩下一小部分不参与学习,

而是用来检测学习后的成果.

拿去训练的一部分叫训练集, 而拿来做测试的, 就是测试集. python中已经有了封装好的方法去随机抽这些数据了.

一样的, 用封装好的方法, 就需要导入包:

from sklearn.model_selection import train_test_split

然后, 把数据分成训练集(train_data和train_target, 因为数据和标签都是一一对应的)和测试集(test_data和test_target):

train_data, test_data, train_target, test_target = train_test_split(data,target,test_size=0.2)

可以看见, 给train_test_split()传入了一个test_size=0.2, 表示将样本数据的20%用于测试集.

然后, 我们看看这里面都有啥:


运行:

已经分好了, 然后, 我们就可以拿着我们的训练集进行训练模型了.

在训练模型前, 我们需要先确定训练模型用的算法, 这里有好几个算法供我们使用:

逻辑回归, 朴素贝叶斯, 随机森林, 支持向量机, KNN等

我们先看第一个, 逻辑回归, 使用逻辑回归算法, 需要先导入一个逻辑回归算法的包:

from sklearn.linear_model import LogisticRegression

然后把算法放到变量里, 供我们训练模型用:

clf = LogisticRegression()

接着直接开始用训练集训练模型:

clf.fit(train_data, train_target)


然后我们的模型就训练好了.

现在, 怎么用呢?

好问题.


现在有一个新数据:

鸢尾花的花萼长为6.7, 宽为2.5, 花瓣的长为5.8, 宽为2.3

问, 他属于哪一类鸢尾花.


到这一步, 我们训练好的模型就派上用场了, 预测.

但是在预测前, 我们需要对给出的数据进行处理, 首先就是把它变成一个数组:

[6.7,3.2,5.8,2.3]

我们通过观察可以发现, 训练集和测试集的类型都是:


都是numpy.ndarray类型的,

所以我们也要对数组进行处理.


这里用一个科学计算工具numpy.

一样的, 用谁就导入谁:

import numpy
new_data = [6.7,3.2,5.8,2.3]
new_data = numpy.array(new_data)


执行:

已经变成了可用的数据类型. 

新的数据预处理结束, 就开始预测了:


这一步比较简单, 直接用训练好的模型.predict( [新数据] )

就好了:

clf.predict( [new_data] )


至此, 代码写完了:


执行一下:

可用看到, 已经预测出来了, 这类鸢尾花种类target是2.

通过最开始我们查看的iris里面的target_name可以知道, [2]类鸢尾花是维吉妮亚鸢尾花



最后, 还有一个问题, 测试集好像还没有用上.  嗯, 先睡觉, 有空再更新.


qixingbit.com
返回列表

上一篇:为什么32位系统最大只支持4G内存

没有最新的文章了...

评论列表

黑客东
黑客东
2个月前 (09-09)

666666

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。