快速入门Python机器学习(八)(下)

简介: 快速入门Python机器学习(八)(下)

5.5.8弹性网络分析波士顿房价数据

#对弹性网络进行分析波士顿房价数据
def ElasticNet_for_for_boston():
       myutil = util()
       X,y = datasets.load_boston().data,datasets.load_boston().target
       X_train,X_test,y_train,y_test = train_test_split(X, y, random_state=8,test_size=0.3)
       #####################################################################################
       elasticnet = ElasticNet().fit(X_train,y_train)
       print('alpha=1,波士顿房价数据训练集得分: {:.2%}'.format(elasticnet.score(X_train,y_train)))
       print('alpha=1,波士顿房价数据测试集得分: {:.2%}'.format(elasticnet.score(X_test,y_test)))
       print('alpha=1,波士顿房价数据弹性网络回归特征数: {}'.format(np.sum(elasticnet.coef_!=0)))
       title = "ElasticNet 波士顿房价数据 alpha=1"
       myutil.plot_learning_curve(ElasticNet(),X,y,title)
       myutil.show_pic(title)
       #####################################################################################
       elasticnet10 = ElasticNet(alpha=10).fit(X_train,y_train)
       print('alpha=10,波士顿房价数据训练集得分: {:.2%}'.format(elasticnet10.score(X_train,y_train)))
       print('alpha=10,波士顿房价数据测试集得分: {:.2%}'.format(elasticnet10.score(X_test,y_test)))
       print('alpha=10,波士顿房价数据弹性网络回归特征数: {}'.format(np.sum(elasticnet10.coef_!=0)))
        title = "ElasticNet 波士顿房价数据 alpha=10"
       myutil.plot_learning_curve(ElasticNet(alpha=10),X,y,title)
       myutil.show_pic(title)
       #####################################################################################
       elasticnet01 = ElasticNet(alpha=0.1).fit(X_train,y_train)
       print('alpha=0.1,波士顿房价数据训练集得分: {:.2%}'.format(elasticnet01.score(X_train,y_train)))
       print('alpha=0.1,波士顿房价数据测试集得分: {:.2%}'.format(elasticnet01.score(X_test,y_test)))
       print('alpha=0.1,波士顿房价数据弹性网络回归特征数: {}'.format(np.sum(elasticnet01.coef_!=0)))
       title = "ElasticNet 波士顿房价数据 alpha= 0.1"
       myutil.plot_learning_curve(ElasticNet(alpha=0.1),X,y,title)
       myutil.show_pic(title)
       #####################################################################################
       title = "Lasso 波士顿房价数据 数据分布比较"
       plt.plot(elasticnet.coef_,'s',label='弹性网络 alpha=1')
       plt.plot(elasticnet10.coef_,'^',label='弹性网络 alpha=10')
       plt.plot(elasticnet01.coef_,'v',label='弹性网络 alpha=0.1')
       plt.xlabel(u'系数指数')
       plt.ylabel(u'系数大小')
       plt.legend(loc='lower right')
       title = "比较弹性网络参数"
       myutil.show_pic(title)
       #####################################################################################
       elasticnet_01 = ElasticNet(l1_ratio=0.1).fit(X_train,y_train)
       print('l1_ratio=0.1,波士顿房价数据训练集得分: {:.2%}'.format(elasticnet_01.score(X_train,y_train)))
       print('l1_ratio=0.1,波士顿房价数据测试集得分: {:.2%}'.format(elasticnet_01.score(X_test,y_test)))
       print('l1_ratio=0.1,波士顿房价数据弹性网络回归特征数: {}'.format(np.sum(elasticnet_01.coef_!=0)))
       title = " ElasticNet 波士顿房价数据 l1_ratio=0.1"
       myutil.plot_learning_curve(ElasticNet(l1_ratio=0.1),X,y,title)
       myutil.show_pic(title)
       #####################################################################################
       elasticnet05 = ElasticNet(l1_ratio=0.5).fit(X_train,y_train)
       print(' l1_ratio=0.5,波士顿房价数据训练集得分: {:.2%}'.format(elasticnet05.score(X_train,y_train)))
       print(' l1_ratio=0.5,波士顿房价数据测试集得分: {:.2%}'.format(elasticnet05.score(X_test,y_test)))
       print(' l1_ratio=0.5,波士顿房价数据弹性网络回归特征数: {}'.format(np.sum(elasticnet05.coef_!=0)))
       title = "ElasticNet 波士顿房价数据 l1_ratio=0.5"
       myutil.plot_learning_curve(ElasticNet(l1_ratio=0.5),X,y,title)
       myutil.show_pic(title)
       #####################################################################################
       elasticnet09 = ElasticNet(l1_ratio=0.9).fit(X_train,y_train)
       print('l1_ratio=0.9,波士顿房价数据训练集得分: {:.2%}'.format(elasticnet09.score(X_train,y_train)))
       print('l1_ratio=0.9,波士顿房价数据测试集得分: {:.2%}'.format(elasticnet09.score(X_test,y_test)))
       print('l1_ratio=0.9,波士顿房价数据弹性网络回归特征数: {}'.format(np.sum(elasticnet09.coef_!=0)))
       title = "ElasticNet 波士顿房价数据 l1_ratio= 0.9"
       myutil.plot_learning_curve(ElasticNet(l1_ratio=0.9),X,y,title)
       myutil.show_pic(title)
       #####################################################################################
       title = "ElasticNet 波士顿房价数据 数据分布比较"
       plt.plot(elasticnet_01.coef_,'s',label='弹性网络 l1_ratio=0.1')
       plt.plot(elasticnet05.coef_,'^',label='弹性网络 l1_ratio=0.5')
       plt.plot(elasticnet09.coef_,'v',label='弹性网络 l1_ratio=0.9')
       plt.xlabel(u'系数指数')
       plt.ylabel(u'系数大小')
       plt.legend(loc='lower right’)
       title = "比较弹性网络参数"
       myutil.show_pic(title)


输出

alpha=1,波士顿房价数据训练集得分: 70.40%
alpha=1,波士顿房价数据测试集得分: 63.31%
alpha=1,波士顿房价数据弹性网络回归特征数: 10
alpha=10,波士顿房价数据训练集得分: 56.10%
alpha=10,波士顿房价数据测试集得分: 48.73%
alpha=10,波士顿房价数据弹性网络回归特征数: 5
alpha=0.1,波士顿房价数据训练集得分: 74.12%
alpha=0.1,波士顿房价数据测试集得分: 67.82%
alpha=0.1,波士顿房价数据弹性网络回归特征数: 12
l1_ratio=0.1,波士顿房价数据训练集得分: 70.63%
l1_ratio=0.1,波士顿房价数据测试集得分: 63.64%
l1_ratio=0.1,波士顿房价数据弹性网络回归特征数: 12
l1_ratio=0.5,波士顿房价数据训练集得分: 70.40%
l1_ratio=0.5,波士顿房价数据测试集得分: 63.31%
l1_ratio=0.5,波士顿房价数据弹性网络回归特征数: 10
l1_ratio=0.9,波士顿房价数据训练集得分: 69.97%
l1_ratio=0.9,波士顿房价数据测试集得分: 62.78%
l1_ratio=0.9,波士顿房价数据弹性网络回归特征数: 10


alpha

l1_ratio

训练集得分

测试集得分

特征数

0.1

0.5

74.12%

67.82%

12

1.0

0.5

70.40%

63.31%

10

10

0.5

56.10%

48.73%

5

1.0

0.1

70.63%

63.64%

12

1.0

0.5

70.40%

63.31%

10

1.0

0.9

69.97%

62.78%

10


波士顿加载并返回波士顿房价数据集(回归)维度:13


image.png

image.png

image.png

image.png

image.png

image.png

alpha =10 (^ 橘黄色上箭头)
alpha =1 (s 蓝色方块)
alpha = 0.1 (v 绿色下箭头)


alpha越大越集中

image.png


l1-ratio=0.5 (^ 橘黄色上箭头)
l1-ratio =0.1 (s 蓝色方块)
l1-ratio =0.9 (v 绿色下箭头)


成对出现,与l1-ratio无关。


5.6总结


5.6.1分析糖尿病数据



alpha

l1_ratio

训练集得分

测试集得分

特征数

线性回归

-

-

53.04%

45.93%

-

岭回归

1

-

43.01%

43.04%

-

10

-

14.47%

15.88%

-

0.1

-

52.48%

47.11%

-

套索回归

1

-

36.73%

38.28%

3

10

-

0.00%

-0.01%

0

0.1

-

52.36%

52.36%

7

弹性网络

0.1

0.5

10.04%

11.08%

9

1.0

0.5

0.86%

0.93%

9

10

0.5

0.00%

-0.01%

0

1.0

0.1

0.66%

0.72%

9

1.0

0.5

0.86%

0.93%

9

1.0

0.9

2.73%

2.93%

6


def Analysis_diabetes_data():
       myutil = util()
       ax = plt.gca()
       diabetes = datasets.load_diabetes()
       X,y = diabetes.data,diabetes.target
       X_train,X_test,y_train,y_test = train_test_split(X, y, random_state =8)
       #将特征数字中的最大和最小值一散点图形式画出来
       plt.plot(X.min(axis=0),'v',label='最小')
       plt.plot(X.max(axis=0),'^',label='最大')
       #纵坐标为对数形式
       plt.yscale('log')
       #设置图注位置最佳
       plt.legend(loc='best')
       ax.set_xlabel(u'特征')
       ax.set_ylabel(u'特征量')
       title = u"糖尿病数据分析"
       myutil.show_pic(title)
        #对训练集和测试集数据进行预处理
       scaler = StandardScaler()
       scaler.fit(X_train)
       X_train_scaler = scaler.transform(X_train)
       X_test_scaler = scaler.transform(X_test)
       plt.plot(X_train_scaler.min(axis=0),'v',label=u'训练集最小')
       plt.plot(X_train_scaler.max(axis=0),'^',label=u'训练集最大')
       plt.plot(X_test_scaler.min(axis=0),'v',label=u'测试集最小')
       plt.plot(X_test_scaler.max(axis=0),'^',label=u'测试集最大')
       plt.legend(loc='best')
       ax.set_xlabel(u'预处理特征')
       ax.set_ylabel(u'预处理特征量')
       title = u"预处理后的糖尿病数据分析"
       myutil.show_pic(title)
        #用线性回归最优解处理
       clf = LinearRegression()
       clf = clf.fit(X_train_scaler,y_train)
       print('线性回归糖尿病训练集得分: {:.2%}'.format(clf.score(X_train_scaler,y_train)))
       print('线性回归糖尿病测试集得分: {:.2%}'.format(clf.score(X_test_scaler,y_test)))
       ############################################################################################
       #用岭回归最优解处理
       clf = Ridge(alpha=0.1)
       clf = clf.fit(X_train_scaler,y_train)
       print('岭回归糖尿病训练集得分: {:.2%}'.format(clf.score(X_train_scaler,y_train)))
       print('岭回归糖尿病测试集得分: {:.2%}'.format(clf.score(X_test_scaler,y_test)))
       ############################################################################################
       #用套索回归最优解处理
       clf = Lasso(alpha=0.1)
       clf = clf.fit(X_train_scaler,y_train)
       print('套索回归糖尿病训练集得分: {:.2%}'.format(clf.score(X_train_scaler,y_train)))
       print('套索回归糖尿病测试集得分: {:.2%}'.format(clf.score(X_test_scaler,y_test)))
        #用弹性网络回归最优解处理
       clf = ElasticNet(alpha=0.1,l1_ratio=0.5)
       clf = clf.fit(X_train_scaler,y_train)
       print('弹性网络糖尿病训练集得分: {:.2%}'.format(clf.score(X_train_scaler,y_train)))
       print('弹性网络糖尿病测试集得分: {:.2%}'.format(clf.score(X_test_scaler,y_test)))


输出


线性回归糖尿病训练集得分: 53.04%
线性回归糖尿病测试集得分: 45.93%
岭回归糖尿病训练集得分: 53.04%
岭回归糖尿病测试集得分: 45.98%
套索回归糖尿病训练集得分: 52.96%
套索回归糖尿病测试集得分: 46.36%
弹性网络糖尿病训练集得分: 52.52%
弹性网络糖尿病测试集得分: 46.92%





拟合前

拟合后


alpha

l1_ratio

训练集得分

测试集得分

训练集得分

测试集得分

线性回归

-

-

53.04%

45.93%

53.04%

45.93%

岭回归

0.1

-

52.48%

47.11%

53.04%

45.98%

套索回归

0.1

-

52.36%

52.36%

52.96%

46.36%

弹性网络

0.1

0.5

10.04%

11.08%

52.52%

46.92%


结论:数据处理后,弹性网络的得分提升很明显。


5.6.2分析波士顿房价



alpha

l1_ratio

训练集得分

测试集得分

特征数

线性回归

-

-

74.86%

71.54%

-

岭回归

1

-

74.86%

69.76%

-

10

-

74.48%

68.49%

-

0.1

-

74.98%

70.64%

-

套索回归

1

-

69.75%

62.49%

10

10

-

54.76%

68.49%

4

0.1

-

74.25%

67.98%

12

弹性网络

0.1

0.5

74.12%

67.82%

12

1.0

0.5

70.40%

63.31%

10

10

0.5

56.10%

48.73%

5

1.0

0.1

70.63%

63.64%

12

1.0

0.5

70.40%

63.31%

10

1.0

0.9

69.97%

62.78%

10


from sklearn.preprocessing import StandardScaler
def Analysis_boston_data():
       myutil = util()
       ax = plt.gca()
       boston = datasets.load_boston()
       X,y = boston.data,boston.target
       X_train,X_test,y_train,y_test = train_test_split(X, y, random_state =8)
       #将特征数字中的最大和最小值一散点图形式画出来
       plt.plot(X.min(axis=0),'v',label='最小')
       plt.plot(X.max(axis=0),'^',label='最大')
       #纵坐标为对数形式
       plt.yscale('log')
       #设置图注位置最佳
       plt.legend(loc='best')
       ax.set_xlabel(u'特征')
       ax.set_ylabel(u'特征量')
       title = u"波士顿房价数据分析"
       myutil.show_pic(title)
        #对训练集和测试集数据进行预处理
       scaler = StandardScaler()
       scaler.fit(X_train)
       X_train_scaler = scaler.transform(X_train)
       X_test_scaler = scaler.transform(X_test)
       plt.plot(X_train_scaler.min(axis=0),'v',label=u'训练集最小')
       plt.plot(X_train_scaler.max(axis=0),'^',label=u'训练集最大')
       plt.plot(X_test_scaler.min(axis=0),'v',label=u'测试集最小')
       plt.plot(X_test_scaler.max(axis=0),'^',label=u'测试集最大')
       plt.legend(loc='best')
       ax.set_xlabel(u'预处理特征')
       ax.set_ylabel(u'预处理特征量')
       title = u"预处理后的波士顿房价数据分析"
       myutil.show_pic(title)
       ############################################################################################
       #用线性回归最优解处理
       clf = LinearRegression()
       clf = clf.fit(X_train_scaler,y_train)
       print('线性回归波士顿房价训练集得分: {:.2%}'.format(clf.score(X_train_scaler,y_train)))
       print('线性回归波士顿房价测试集得分: {:.2%}'.format(clf.score(X_test_scaler,y_test)))
       ############################################################################################
       #用岭回归最优解处理
       clf = Ridge(alpha=0.1)
       clf = clf.fit(X_train_scaler,y_train)
       print('岭回归波士顿房价训练集得分: {:.2%}'.format(clf.score(X_train_scaler,y_train)))
       print('岭回归波士顿房价测试集得分: {:.2%}'.format(clf.score(X_test_scaler,y_test)))
       ############################################################################################
       #用套索回归最优解处理
       clf = Lasso(alpha=10)
       clf = clf.fit(X_train_scaler,y_train)
       print('套索回归波士顿房价训练集得分: {:.2%}'.format(clf.score(X_train_scaler,y_train)))
        print('套索回归波士顿房价测试集得分: {:.2%}'.format(clf.score(X_test_scaler,y_test)))
       ############################################################################################
       #用弹性网络回归最优解处理
       clf = ElasticNet(alpha=0.1,l1_ratio=0.5)
       clf = clf.fit(X_train_scaler,y_train)
       print('弹性网络波士顿房价训练集得分: {:.2%}'.format(clf.score(X_train_scaler,y_train)))
       print('弹性网络波士顿房价测试集得分: {:.2%}'.format(clf.score(X_test_scaler,y_test)))


输出


线性回归波士顿房价训练集得分: 74.45%
线性回归波士顿房价测试集得分: 71.90%
岭回归波士顿房价训练集得分: 74.45%
岭回归波士顿房价测试集得分: 71.90%
套索回归波士顿房价训练集得分: 0.00%
套索回归波士顿房价测试集得分: -0.00%
弹性网络波士顿房价训练集得分: 73.86%
弹性网络波士顿房价测试集得分: 71.25%





拟合前

拟合后


alpha

l1_ratio

训练集得分

测试集得分

训练集得分

测试集得分

线性回归

-

-

74.86%

71.54%

74.45%

71.90%

岭回归

0.1

-

74.98%

70.64%

74.45%

71.90%

套索回归

10

-

54.76%

68.49%

0.00%

-0.00%

弹性网络

0.1

0.5

74.12%

67.82%

73.86%

71.25%


除了套索回归得分基本没变。

image.png


拟合前,数据分散

image.png


拟合后数据集中在0-10之间。

sklearn.preprocessing.StandardScaler:通过去除均值和缩放单位方差来标准化特征

sklearn.preprocessing.StandardScaler(copy=True, with_mean=True, with_std=True)


参数

解释

copy

如果为false,就会用归一化的值替代原来的值;如果被标准化的数据不是np.arrayscipy.sparse CSR matrix, 原来的数据还是被copy而不是被替代

 with_std

boolean类型,默认为True,表示将数据方差规范到1

with_mean

boolean类型,默认为True,表示将数据均值规范到0


这里是用于做标准化,将数据的方差规范到1,均值规范到0,实际上就是标准正态分布的方差和均值

image.png


均值:平均数

Sklearn提供了以下的缩放方法


sklearn.preprocessing.StandardScaler

通过去除均值和缩放单位方差来标准化特征

sklearn.preprocessing.MinMaxScaler

通过将每个特征缩放到给定范围来变换特征

sklearn.preprocessing.RobustScaler

使用对异常值具有鲁棒性的统计数据来缩放特征。

sklearn.preprocessing.Normalizer

将样本分别标准化为单位标准

sklearn.preprocessing.MaxAbsScaler

按最大绝对值缩放每个特征。

sklearn.preprocessing.QuantileTransformer

利用分位数信息变换特征

sklearn.preprocessing.Binarizer

根据阈值对数据进行二值化(将特征值设置为01

sklearn.preprocessing.PolynomialFeatures

生成多项式和交互特征

sklearn.preprocessing.OneHotEncoder

将分类特征为独热编码的数字数组。


目录
相关文章
|
8月前
|
机器学习/深度学习 算法 Python
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
335 7
|
6月前
|
机器学习/深度学习 人工智能 算法
Scikit-learn:Python机器学习的瑞士军刀
想要快速入门机器学习但被复杂算法吓退?本文详解Scikit-learn如何让您无需深厚数学背景也能构建强大AI模型。从数据预处理到模型评估,从垃圾邮件过滤到信用风险评估,通过实用案例和直观图表,带您掌握这把Python机器学习的'瑞士军刀'。无论您是AI新手还是经验丰富的数据科学家,都能从中获取将理论转化为实际应用的关键技巧。了解Scikit-learn与大语言模型的最新集成方式,抢先掌握机器学习的未来发展方向!
987 12
Scikit-learn:Python机器学习的瑞士军刀
|
5月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
236 1
|
9月前
|
机器学习/深度学习 数据可视化 算法
Python与机器学习:使用Scikit-learn进行数据建模
本文介绍如何使用Python和Scikit-learn进行机器学习数据建模。首先,通过鸢尾花数据集演示数据准备、可视化和预处理步骤。接着,构建并评估K近邻(KNN)模型,展示超参数调优方法。最后,比较KNN、随机森林和支持向量机(SVM)等模型的性能,帮助读者掌握基础的机器学习建模技巧,并展望未来结合深度学习框架的发展方向。
Python与机器学习:使用Scikit-learn进行数据建模
|
8月前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
8月前
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
440 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
机器学习/深度学习 数据可视化 数据处理
掌握Python数据科学基础——从数据处理到机器学习
掌握Python数据科学基础——从数据处理到机器学习
207 0
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
432 0

热门文章

最新文章

推荐镜像

更多