机器学习从入门到创业手记-初识sklearn

之前对刘思聪了解并不多,印象中就是个矮胖子,说话总是牛哄哄的,现在他坐在了我的左边,右边坐着路思,本来路思应该挨着刘思聪的,但他在宿舍里和我说他不喜欢那么张扬的人,要跟我换了座位。

 

       刘思聪:hi,你们在战情室待着有趣么?晚上没事的话,我请你们加上高维一起吃个饭,以后有需要帮助的地方尽管开口。我随声附和着,而路思则在一边上着网,仿佛没有听见。

 

这时邮件系统提示一封新邮件到达:

 

Dear All :

 

欢迎使用爱视达智能科技e-learn系统,从今天开始你们将利用该系统完成接下来的学习任务。

 

PS:请到公司前台领取耳机。

 

       Thanks

      

我带上耳机点开了公司的e-learn系统。

 

PPT页1

 

       随着elearn系统的打开,内容以PPT形式的呈现在了眼前,耳边也响起了悦耳的旁边:PPT页1讲述的是sklearn开发第一步导入数据,其提供两种导入方式,第一种为其内置的各种demo数据集,用以学习或测试用,第二种则采用python的panda库来导入csv格式的数据,panda库可以通过pip install panda下载并安装。

 

PPT页2

 

       旁白:PPT页2以demo数据为例,导入数据后需要将数据集中的数据分割成训练数据和目标数据,x在这里被赋值为训练数据用于传入模型,而y被设定为目标数据,是每条训练数据对应的正确结果。Sklearn还提供了一种非常方式可以简单的将我们的数据集随机分割为训练集合测试集,并可以通过参数test_size来指定测试集所占的比例,测试集被分割出被用来对生成的模型进行准确率验证。

 

PPT页3

 

       旁白:PPT页3展示了如何导入sklearn的已有模型并传入训练数据,将模型适配数据集。

 

PPT页4

 

       旁白:PPT页4讲述的是利用之前适配出的模型,在分割出的测试集上验证模型的准确率,并查看准确率得分,这里可以看到只有67%左右的预测准确率,请参考PPT页5,PPT页6和PPT页7导入岭回归与Lasso回归模型比较一下准确率。

PPT页5

PPT页6

PPT页7

 

       我还没缓过神来,第一阶段的课后练习已经摆在了我的面前,需要提交自己的代码才能继续进行下去。好在这个并不难,只要照猫画虎就可以完成。

 

安逸的岭回归代码:

 

from sklearn.datasets import load_boston

boston = load_boston()

 

x = boston.data

y = boston.target

#将数据分为训练数据集与测试数据集

from sklearn.model_selection import train_test_split

X_train,X_test,y_train,y_test = train_test_split(x,y,random_state=33,test_size=0.25)

 

from sklearn import linear_model

 

#岭回归

lr_ridge = linear_model.Ridge (alpha = .5)

lr_ridge.fit(X_train,y_train)

y_pred = lr_ridge.predict(X_test)

print ('Ridge is',lr_ridge.score(X_test,y_test))

 

#Lasso回归

lr_lasso = linear_model.Lasso(alpha = 0.1)

lr_lasso.fit(X_train,y_train)

y_pred = lr_lasso.predict(X_test)

print ('Lasso is',lr_lasso.score(X_test,y_test))

 

代码提交后,elearn系统回馈给了代码的输出:

 

Ridge is 0.6712308301645985

Lasso is 0.6600305025011655

 

       旁白:完成第一课时学习总共耗时35分钟,排在所有学员中第八位。下面请继续学习。

 

PPT页8

 

       PPT页9

PPT页10

 

       安逸的测试代码:

 

#range(起点,终点,步长)

for i in range(0,11,1):

       lr_ridge = linear_model.Ridge (alpha = float(i/10))

       lr_ridge.fit(X_train,y_train)

       y_pred = lr_ridge.predict(X_test)

       print("alpha: %f  , Loss Value : %.2f" % (float(i/10),np.mean((lr_ridge.predict(X_test) - y_test) ** 2)))

       print ('Ridge is',lr_ridge.score(X_test,y_test))

 

       提交代码后,系统返回了输出:

 

alpha: 0.000000  , Loss Value : 25.10

Ridge is 0.6763403830998698

alpha: 0.100000  , Loss Value : 25.19

Ridge is 0.6751472577232447

alpha: 0.200000  , Loss Value : 25.28

Ridge is 0.6740377362363645

alpha: 0.300000  , Loss Value : 25.35

Ridge is 0.6730170987607017

alpha: 0.400000  , Loss Value : 25.43

Ridge is 0.6720832538646662

alpha: 0.500000  , Loss Value : 25.49

Ridge is 0.6712308301645985

alpha: 0.600000  , Loss Value : 25.55

Ridge is 0.6704532171917609

alpha: 0.700000  , Loss Value : 25.61

Ridge is 0.6697435803085565

alpha: 0.800000  , Loss Value : 25.66

Ridge is 0.669095350599211

alpha: 0.900000  , Loss Value : 25.70

Ridge is 0.6685024427312771

alpha: 1.000000  , Loss Value : 25.75

Ridge is 0.6679593318533048

 

       旁白:通过输出可以看到趋势了么?alpha参数越趋于0时,预测准确率越高,损失函数值越小,alpha趋于1时则准确率下降,损失函数变大。结论是若alpha趋于0时,模型会倾向于在训练集上最小化损失函数,这样可能会发生过拟合,导致在实际应用中效果变差,所以请选择合适apha值。

 

PPT页11

 

       旁白:matplotlib是著名的python 2D绘图库,可用于python,IPython shell,Jupyter notebook,web应用使用,其包含四个图形UI toolkits,仅需几行代码就可以生成绘图,直方图,功率图,条形图,错误图,散点图等,并可以通过接口函数控制图形大小,线型,字体属性,坐标轴属性等,请运行系统提供的示例。

 

       下载并打开了系统的DemoPlt.py程序

 

from sklearn.datasets import load_boston

boston = load_boston()

 

x = boston.data

y = boston.target

#导入2D绘图库

import matplotlib.pyplot as plt

 

import numpy as np

#使用均方误差来验证结果

from sklearn.metrics import mean_squared_error

#将数据分为训练数据集与测试数据集

from sklearn.model_selection import train_test_split

X_train,X_test,y_train,y_test = train_test_split(x,y,random_state=33,test_size=0.25)

#将10的负6次方到10的6次方平分100份

alphas = np.logspace(-6, 6, 100)

 

pred = []

errors = []

from sklearn.linear_model import Ridge

clf = Ridge()

 

for a in alphas:

    clf.set_params(alpha=a)

    clf.fit(X_train, y_train)

 

    errors.append(mean_squared_error(clf.predict(X_test), y_test))

 

plt.figure(figsize=(20, 6))

ax = plt.gca()

ax.plot(alphas, errors)

ax.set_xscale('log')

plt.xlabel('alpha')

plt.ylabel('error')

plt.title('alpha & error')

plt.axis('tight')

plt.show()

 

运行效果如图3.2.1,旁边:这里可以看到X轴正则化强度参数,随着X轴数值变化,Y轴均方误差值也跟着变化,X轴值越小均方误差也越小,X轴值越大,Y轴均方误差值也随着增长。

图3.2.1

 

      

PPT页12

      

安逸提交的Lasso代码:

 

from sklearn.datasets import load_boston

boston = load_boston()

 

x = boston.data

y = boston.target

#导入2D绘图库

import matplotlib.pyplot as plt

 

import numpy as np

#使用均方误差来验证结果

from sklearn.metrics import mean_squared_error

#将数据分为训练数据集与测试数据集

from sklearn.model_selection import train_test_split

X_train,X_test,y_train,y_test = train_test_split(x,y,random_state=33,test_size=0.25)

#将10的负6次方到10的6次方平分200份

alphas = np.logspace(-6, 6, 200)

 

pred = []

errors = []

from sklearn.linear_model import Lasso

clf = Lasso()

 

for a in alphas:

    clf.set_params(alpha=a)

    clf.fit(X_train, y_train)

 

    errors.append(mean_squared_error(clf.predict(X_test), y_test))

 

plt.figure(figsize=(20, 6))

ax = plt.gca()

ax.plot(alphas, errors)

ax.set_xscale('log')

plt.xlabel('alpha')

plt.ylabel('error')

plt.title('alpha & error(Lasso)')

plt.axis('tight')

 

plt.show()

 

提交代码后系统给出运行结果如图3.2.2:

图3.2.2

 

旁白:图3.2.1和图3.2.2,比较Ridge和Lasso的曲线区别:

 

安逸提交的区别:

 

Ridge由于采用L2正则化方式,不会减少特征量,故alpha值变化时,均方误差一直会变化,而Lasso采用的是L1正则化,其会减少特征量,当达到一定阈值时,所有能被减少的特征量都已经被减掉了,故再变化alpha值不会对均方误差有影响。

 

旁白:今天的sklearn基础培训结束,您的总体评价89分,位于第7名。

 

我松了一口气,今天的培训还不是很难,基本上没有什么难以理解的理论知识。这时,刘思聪又凑了过来说:哥们,才写完啊,我都玩了半天手游了。我说:恩,我不是这个相关专业的,所以有些慢。刘思聪:没事,以后有问题就请教我就行了,晚上一定给面子啊,一起吃个便饭。

 

北京的夜晚很美,我以前总是行色匆匆没有来的及欣赏过,今天刘思聪请我们到一家名叫便宜坊的地方吃烤鸭,路思打趣道:思聪,你这么有钱就请我们来这吃是不是图便宜啊。刘思聪:哈哈,便宜坊的便发音是biàn,是北京著名的烤鸭店,已有600多年的历史了,咱们四个人随便吃吃也得近千元的。

 

整晚的觥筹交错,灯红酒绿,让人觉得有钱真是好啊。让我也对刘思聪嘴里经常说的那个“北京人要局气”有了理解。

 

猜你喜欢

转载自blog.csdn.net/yoki2009/article/details/88530980