史诗级的人类年度迁徙大戏又将要开始了,今天我们聊怎么使用模型。
这个话题,初看有点怪。
都说机器学习像下厨,洗菜、切菜、炒菜,三道工序过后,模型就训练好了,最后一步就是张嘴——这难道还值得专门讨论?
也许机器学习的教材们也都这么认为,介绍任何模型,总是噼里啪啦,把算法原理和怎么训练风风火火过了一遍,然后就结尾了。
“那么......训练好的模型,要怎么用呢?”
像是问了个难以启齿的私密问题,感觉羞愧不已。但愿我不是个例。回答倒也简单:怎么训练的,就怎么使用。
具体来说,训练机器模型,需要喂训练集的数据,首先把X喂进去,然后模型吐出预测值,最后用损失函数计算预测值与真实值Y(也就是参考答案)的偏差。以此反复,总要经历几轮纠结和挣扎。
啥时候完事呢?偏差达到最小化,模型就训练好了。
那回到最开始的问题,怎样使用训练好的模型呢?
也很简单,上面看出来了,模型无非就是一个喂点什么进去,然后就会吐点什么出来的玩意。只把要预测的X输入进去,当然照理吐出的预测值。
这就是模型的预测结果。
口说无凭,还是操家伙比划一下吧。
首先把数据集分成训练集和测试集,这里拿sklearn自带的波士顿房价数据集:
from sklearn import datasets
from sklearn.model_selection import train_test_split
X,y = datasets.load_boston(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y)
现在我们有了四套数据,依次是训练集X,测试集X,训练集Y和测试集Y。
记住,Y在机器学习里,都是代表有监督学习的参考答案,是要和模型的预测值比较的。
选一套模型吧。波士顿房价数据集是明码实价的回归问题,就选择用最最最基础的线性回归模型烹调好了。
首先是声明。线性回归模型在sklearn的linear_model包里,调用的方法类似生成类实例:
from sklearn import linear_model
reg = linear_model.LinearRegression()
这里什么参数都不设,裸奔。然后就可以使用训练集训练了,sklearn里统统叫fit:
model = reg.fit(X_train,y_train)
返回的model就是训练好的模型。对,就是这么简单。
现在,可以使用这个模型了。玩法有很多,第一种当然是让它吐预测结果:
model.predict(X_test)
这里把测试集X喂进去,吐出来的大概像这样:
array([20.14171686, 23.96847609, 31.97756866, 19.01703191, 23.34777506,
25.20483101, 19.22534511, 13.58767032, 19.01416346, 22.40268024,
29.26157126, 23.61935079, 32.37282478, 13.24846817, 18.09105386,
18.45692334, 17.29880733, 26.26903481, 21.34707614, 19.1142124
...])
养兵千日用兵一时,我们花这么长的时间训练模型,喂它这么多数据,为的就是它在真实环境吐这一下。
当然,既然叫测试集,自然知道参考答案,可以看看没进行数据清洗和参数调优的模型裸考能得多少分。考试方法如下:
model.score(X_test, y_test)
这里测的是R2,满分1分,最低0分。这次模型的得分是0.7668,算不上优秀,但好歹滚过及格线了,呵,大学生~
下次再聊。