在之前的文章手把手教你在应用里用上iOS机器学习框架Core ML里,我们用苹果的机器学习框架Core ML和事先训练好的模型,在iOS11上体验了一把机器学习的智能。这些新技术让我对机器学习能给产品设计和开发提供的丰富可能性充满期待。
大家都知道,机器学习是一个充满着复杂数学公式和算法的门槛较高的领域。也许你现在也跟之前的我一样,看着机器学习的大门不知道该怎么迈出第一步。洗脚不用先学游泳,让我用一个不能更简单的例子,告诉你怎么训练出你的第一个机器学习模型。
要解决的问题
机器学习的一个重要应用领域就是事先使用大量数据训练机器,让训练后的机器在面对从未见过的数据时能做出相应的判断。所以我们先准备好要解决的问题和相应的数据。
人的身体的各个属性往往存在联系,身高高的人体重往往会重一些。
这里是一份人的身体数据,它包括了性别、身高和体重三列。我们将用这份数据来训练一个机器学习模型,让他可以根据人的性别和身高预测他的体重。数据详见Data.csv。
Gender | Height(cm) | Weight(kg) |
---|---|---|
0 | 163 | 50 |
0 | 163 | 47 |
1 | 169 | 61 |
0 | 163 | 55 |
0 | 163 | 61 |
... | ... | ... |
顺带提一下,这份数据是我根据一个规则加上正态分布的随机数生成出来的,生成用的代码是GenerateFakeData.py。
开发环境
运行这个例子需要机器上有Python 2.7的开发环境。同时安装好numpy, pandas 和sklearn三个库。
推荐下载Anaconda的Python2.7版本。Anaconda包括了以上所有要用到的东西,还附带了别的科学计算用的库,同时它还提供了一系列库管理的功能,你值得拥有。
训练模型
from sklearn.linear_model import LinearRegression
import pandas as pd
导入要用到的库。
full_data = pd.read_csv("Data.csv")
用pandas库把Data.csv文件里的内容读出来。
model = LinearRegression()
model.fit(full_data[['Gender', 'Height']], full_data["Weight"])
创建一个线性回归的模型,调用它的fit
方法训练它,注意我们要用性别和身高预测体重,所以fit
方法的第一个参数是性别和身高,第二个参数是体重。
我们来试试这个模型预测的结果吧。
print model.predict([[1, 172]])
传入一个数组[1, 172],我要预测身高172cm男性的体重。
[ 66.811415]
推测体重是66.811415kg。
根据生成数据的逻辑,172cm的男性的体重应该是67kg,与预测的情况基本一致。
这只是个开始
这篇文章提供的内容其实特别特别简单。但我希望通过这篇文章,在尽可能的屏蔽理论细节的情况下,让你以最快的速度训练起自己的第一个机器学习模型。我相信,比起理论,实际的应用更容易激发人的好奇心,让人开始继续深入探索。
这个简单的用性别和身高预测体重的例子就可以提出很多问题。能不能用性别和体重来预测身高?能不能用身高和体重来预测出这个人的性别?在例子里我直接用了线性回归作为模型算法,我没有解释原因,这个算法到底是干什么的?它适合解决什么样的问题?还有没有别的算法?它们都能用来解决什么问题?这一个个问题会引导着你在这个领域的一步步前行。
如果你有兴趣在机器学习的领域走的更远一点,在Kaggle上有个很合适的练习。这个练习提供了一份泰坦尼克号上乘客的名单,包括了乘客的个人信息:性别、年龄、在哪上的船、社会阶层、船票的价格等等等等。我们要做的,是根据这些已知的乘客信息,在判断一个新的乘客是不是会在这个灾难后存活。
如果你有兴趣,你还可以好好逛逛Kaggle,这里有非常多的问题和数据,甚至还有一些带有悬赏的比赛,你也可以找一个你感兴趣的开始你的研究。
如果你想把你生成的机器模型用到自己的iOS应用上,请参阅如何把sklearn机器学习模型转换为Core ML支持的格式
本文所有的代码都已经上传到Github上。