前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1 机器学习入门——线性回归第一课

1 机器学习入门——线性回归第一课

作者头像
天涯泪小武
发布2019-01-17 12:00:12
6000
发布2019-01-17 12:00:12
举报
文章被收录于专栏:SpringCloud专栏SpringCloud专栏

先来上例子吧,让我们来感受一下什么是机器学习。

我们先给出一批数据,它们长这样:

x,y

1,2

2,4

3,6

4,8

……

此时,我们希望你能预测一下,当x是1万时,y的值。如果你具备初中以上的数学知识,聪明的你可能已经能给出答案了。是的,结果是2万。

至少在这个层面,你已经超越了机器。因为你只需要看几秒,就能给出非常靠谱的预测值。这是一个非常好的开端,证明你完全具备搞定机器学习的能力。机器在看到这一堆数字时,它是无法预测出y的值的,因为它看不懂,它需要给它指明一个算法,然后它才能通过算法去不断的尝试、去逼近那个正确的解。

此时,我们暂且可以将机器学习理解为,我们给定一批数据和结果,机器从中通过算法运算,得到一个模型(model),这个model将在未来你次给出之前未知的数据时,机器将返回给你一个正确或者相对靠谱的结果。

我们是怎么知道从那么一批数据中,预测出x为1万时,y是2万呢?因为我们心中有一个方程,y=2*x。这个方程就是model,可以看到这是一个线性方程,它的分布完全或近乎都在一条直线上。通过我们博学的知识,知道它是一个一元一次方程,当然这个方程比较简单,后续我们会碰到N元N次的。

机器学习的过程,就是通过数据来算出方程的过程。

下面我们就来开启机器学习之旅。

这个地址下载对应操作系统的weka版本,目前是3.8.2,如果你电脑已经有java环境了,就下载那个小的,如果没有,就下载那个大的。

安装后打开它,你可以使用java -jar weka.jar来打开,它长这个样子:

点击explorer

我们先来创建一个数据集合,创建一个csv文件,譬如a.csv

里面内容是这样的:

x,y 1,2 2,4 3,6 4,8

5,10

注意第一行是列名,必须要有。

点击open file找到a.csv

打开后是这样

比较重要的地方我都用箭头指出来了。

左上部分有这个数据集的基础属性,attributes有2个,即x,y两个属性。Instances为5,代表共5行5条数据。

当点击x、y时,右边的Selected attribute里面会显示该属性的一些统计信息。Type:Numeric代表类型是数字,还有一个Type是Nominal代表是分类,主要就这两种Type最常用。这个很好理解,一个属性要么是分类,譬如红、黄、蓝是固定的几个中的一个,不会无限多;要么是数字,譬如1,2,3,4,5。Missing代表缺失的值,譬如一共有5行,而y值缺了2个,就会显示在这里。Distinct代表不重复的数量,Unique代表唯一的值的百分率。

它的下面是一些统计值,有平均值,最大最小等,可以有个直观的观察。

下面的Class:y,这个Class代表结果,一般默认是最后一个属性是结果。如果我们希望程序根据x计算y的值,那么class就是y。如果希望是通过别的属性来预测某个属性的值,就设置哪个属性为class。

左下有个remove,可以在选中某个属性后,将它删掉。有时我们的数据集中会有id这种没意义的字段,就需要删掉。

右上角有个save,譬如你对数据集做了一些处理,可以将处理后的数据save一下,就成了新的数据集。如果使用的是csv文件,也最好save一下,保存为weka默认的数据格式arff。

OK!

到这里,我们的数据不需要处理,但是由于是csv文件,我们还是来save一下,保存为arff。后续再来解释这个文件的格式。

代码语言:javascript
复制
@relation a

@attribute x numeric
@attribute y numeric

@data
1,2
2,4
3,6
4,8
5,10

然后再重新open file,选择这个arff文件。

然后我们就要对数据进行算法分析了,选择上面的Classify。

点击Choose,里面有很多的算法,逻辑回归、线性回归、决策树、随机森林、贝叶斯等等各种机器学习常用的算法可供选择。

不同的场合我们会选择不同的算法来训练数据,不同的算法之间的结果差距很大。

这里我们选择线性回归

在Test options里,有多个选项。

use training set代表就使用你当前提供的全部数据作为训练数据。

supplier test set等会再说。

Cross-validation 10代表使用提供的数据做10次交叉验证。做法就是将一份数据集首先进行随机打散,然后均分成10份,再把其中的每一份拿出来作为测试样本,其余的9份作为训练样本,这样就会得到10个训练样本和10个测试样本。最后输出平均值。这个也是常见的用法。

Percentage split代表取一定的百分比用来训练。

这里由于我们的数据集很少,选择使用全部,Use training set。

下面的下拉框,是选择用哪个属性作为结果,也就是y=2*x,那么计算最终的方程就是2 *。如果选了x,那结果就是x=y/2。

一切就绪,点击start。

Classifier model里可以看到训练的结果,y = 2 * x + 0,这就是得到的模型model。

Summary摘要里,可以看到Correlation coefficient(相关系数) 为1,相关系数是用以反映变量之间相关关系密切程度的统计指标。下面的误差全部为0,说明全部正确。

此时我们已经完成了机器学习的第一步,根据数据训练得到了我们的第一个模型,以后用这个模型就可以预测别的数据了。

在这里右键,我们可以save model,保存这个模型。将来就可以反复使用这个模型了,要知道机器学习的最终目的就是为了得到一个模型,这个模型能完成预测任务。

OK,我们已经有了自己的模型,下面就要使用它为我们做未知数据的预测了。

我们再创建一个a-test.csv

代码语言:javascript
复制
x,y
6,12
7,14
8,15

然后拿这个测试集去看看模型的预测结果。你可能会问,为毛测试集里y也有值,没事,如果不想有值的话可以用?代替。我有值,是想看看模型能不能给出测试集的错误率。

在Test options里选择 supplier test set,选择a-test.csv。

在刚才的model右键

选择再次验证模型,使用test set。点击它。

代码语言:javascript
复制
=== Summary ===

Correlation coefficient                  0.982 
Mean absolute error                      0.3333
Root mean squared error                  0.5774
Total Number of Instances                3     

可以看到结果,我们的测试集有一个数据结果是错的。

关于这个结果各指标的解释,看这篇。大概意思是,mean……代表平均相对误差,值越小代表误差越小。

然后我们想看看机器给出的预测结果是什么,还是在模型上右键,选择Visualize classifier errors

点击save,就得到了机器的预测结果。

代码语言:javascript
复制
@relation a_predicted

@attribute x numeric
@attribute predictedy numeric
@attribute y numeric

@data
6,12,12
7,14,14
8,16,15

最后一列是测试集的原值,倒数第二列就是机器给的预测值,可以看到机器给的值都是对的,我们测试集里的15是错的。

这就是最简单的线性回归第一课了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年06月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档