黑马程序员---三天快速入门Python机器学习(第三天)(上)

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 黑马程序员---三天快速入门Python机器学习(第三天)

四、回归与聚类算法


4.1 线性回归


学习目标:


  • 记忆线性回归的原理过程


  • 应用LinearRegression或SGDRegressor实现回归预测


  • 记忆回归算法的评估标准及其公式


4.1.1 线性回归的原理


1 线性回归应用场景



2 什么是线性回归


不同权重加权



2)线性回归的特征与目标的关系分析


广义线性模型



4.1.2 线性回归的损失和优化原理


1 损失函数:最小二乘法



2 优化算法


  1. 正规方程:直接求解W


  1. 梯度下降:试错,改进


正规方程:直接求解W



梯度下降(Gradient Descent)



4.1.3 线性回归API


1)线性回归:


sklearn.linear_model.LinearRegression(fit_intercept=True)


  • fit_intercept:是否计算偏置


  • LinearRegression.coef_:回归系数


  • LinearRegression.intercept_:偏置


2)梯度下降


sklearn.linear_model.SGDRegressor(loss="squared_loss", fit_intercept=True, learning_rate='invscaling', eta0=0.01


  • SGDRegressor类实现了随机梯度下降学习,它支持不同的loss函数和正则化惩罚项来拟合线性回归模型


  • loss:损失类型


  • loss=“squared_loss”:普通最小二乘法


  • fit_intercept:是否计算偏置


  • learning_rate:string,optional


  • 学习率填充


  • ‘constant’:eta=eta0


  • ‘optimal’:eta=1.0 / (alpha*(t+t0)) [default]


  • ‘invscaling’:eta=eta0 / pow(t, power_t)


  • SGDRegression.coef_:回归系数


  • SGDRegression.intercept_:偏置



4.1.4 波士顿房价预测




流程:


1)获取数据集


2)划分数据集


3)特征工程:无量纲化 - 标准化


4)预估器流程:fit() -> 模型,coef_ intercept_


5)模型评估


2 回归性能评估


均方误差(Mean Squared Error)(MSE)评价机制



sklearn.metrics.mean_squared_error(y_ture, y_pred)


  • 均方误差回归损失


  • y_true:真实值


  • y_pred:预测值


  • return:浮点数结果


3 代码


from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression, SGDRegressor
from sklearn.metrics import mean_squared_error
def linner1():
    """
    正规方程的优化方法
    :return:
    """
    # 1)获取数据
    boston = load_boston()
    # 2)划分数据集
    x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22)
    # 3)标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    # 4)预估器
    estimator = LinearRegression()
    estimator.fit(x_train, y_train)
    # 5)得出模型
    print("正规方程权重系数为:\n", estimator.coef_)
    print("正规方程偏置为:\n", estimator.intercept_)
    # 6)模型评估
    y_predict = estimator.predict(x_test)
    print("预测房价:\n", y_predict)
    error = mean_squared_error(y_test, y_predict)
    print("正规方程-均分误差为:\n", error)
    return None
def linner2():
    """
    梯度下降的优化方法
    :return:
    """
    # 1)获取数据
    boston = load_boston()
    print("特征数量:\n", boston.data.shape)  # 几个特征对应几个权重系数
    # 2)划分数据集
    x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22)
    # 3)标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    # 4)预估器
    estimator = SGDRegressor(learning_rate="constant", eta0=0.001, max_iter=10000)
    estimator.fit(x_train, y_train)
    # 5)得出模型
    print("梯度下降权重系数为:\n", estimator.coef_)
    print("梯度下降偏置为:\n", estimator.intercept_)
    # 6)模型评估
    y_predict = estimator.predict(x_test)
    print("预测房价:\n", y_predict)
    error = mean_squared_error(y_test, y_predict)
    print("梯度下降-均分误差为:\n", error)
    return None
if __name__ == '__main__':
    linner1()
    linner2()


正规方程权重系数为:
 [-0.64817766  1.14673408 -0.05949444  0.74216553 -1.95515269  2.70902585
 -0.07737374 -3.29889391  2.50267196 -1.85679269 -1.75044624  0.87341624
 -3.91336869]
正规方程偏置为:
 22.62137203166228
预测房价:
 [28.22944896 31.5122308  21.11612841 32.6663189  20.0023467  19.07315705
 21.09772798 19.61400153 19.61907059 32.87611987 20.97911561 27.52898011
 15.54701758 19.78630176 36.88641203 18.81202132  9.35912225 18.49452615
 30.66499315 24.30184448 19.08220837 34.11391208 29.81386585 17.51775647
 34.91026707 26.54967053 34.71035391 27.4268996  19.09095832 14.92742976
 30.86877936 15.88271775 37.17548808  7.72101675 16.24074861 17.19211608
  7.42140081 20.0098852  40.58481466 28.93190595 25.25404307 17.74970308
 38.76446932  6.87996052 21.80450956 25.29110265 20.427491   20.4698034
 17.25330064 26.12442519  8.48268143 27.50871869 30.58284841 16.56039764
  9.38919181 35.54434377 32.29801978 21.81298945 17.60263689 22.0804256
 23.49262401 24.10617033 20.1346492  38.5268066  24.58319594 19.78072415
 13.93429891  6.75507808 42.03759064 21.9215625  16.91352899 22.58327744
 40.76440704 21.3998946  36.89912238 27.19273661 20.97945544 20.37925063
 25.3536439  22.18729123 31.13342301 20.39451125 23.99224334 31.54729547
 26.74581308 20.90199941 29.08225233 21.98331503 26.29101202 20.17329401
 25.49225305 24.09171045 19.90739221 16.35154974 15.25184758 18.40766132
 24.83797801 16.61703662 20.89470344 26.70854061 20.7591883  17.88403312
 24.28656105 23.37651493 21.64202047 36.81476219 15.86570054 21.42338732
 32.81366203 33.74086414 20.61688336 26.88191023 22.65739323 17.35731771
 21.67699248 21.65034728 27.66728556 25.04691687 23.73976625 14.6649641
 15.17700342  3.81620663 29.18194848 20.68544417 22.32934783 28.01568563
 28.58237108]
正规方程-均分误差为:
 20.62751376309541
特征数量:
 (506, 13)
梯度下降权重系数为:
 [-0.49204282  0.90600442 -0.425408    0.78122193 -1.64479112  2.83475726
 -0.13698271 -3.10445426  1.64364102 -0.88718517 -1.70440114  0.86728865
 -3.89585718]
梯度下降偏置为:
 [22.64133018]
预测房价:
 [28.32988027 31.59628165 21.47291021 32.62500214 20.25743881 19.25430704
 21.38515208 19.41801029 19.65928761 32.85198424 21.37546131 27.39056689
 15.66170121 20.03328423 37.07101073 18.63258981  9.77520186 18.65105864
 30.75325523 24.22837635 19.22472715 34.09165    29.44791249 17.56977717
 34.7787419  26.45428709 34.22802121 27.29578864 19.32013582 15.73108309
 30.8244829  14.45690648 37.39673182  9.17153635 16.4192231  16.95257013
  8.02155337 19.91710981 40.38852095 29.15121021 25.24407119 18.010192
 39.44673115  6.88236339 21.66834002 25.00581309 20.93463887 20.7354025
 16.93857116 26.53856695  9.76725711 27.08260975 30.57506666 16.93015199
  9.7853468  35.48002407 31.38771996 22.92251304 17.5887466  21.81266956
 23.59614589 23.90931722 20.36883456 38.1178319  25.69501252 19.84073947
 14.34417444  6.91806577 42.47139663 21.77826021 16.84647155 22.57258974
 40.93987894 21.67674727 36.91202332 27.13881344 21.80877794 20.7595932
 25.25423255 23.79657533 31.47394835 20.13480903 23.8995206  31.35105601
 27.26683269 21.0353684  29.04765138 21.97300518 26.75012864 18.76796591
 25.07915162 23.89632104 20.11003321 18.24837709 15.66456151 18.41027271
 24.51065473 16.92998012 20.79986196 26.80312356 20.88746429 18.18470202
 24.16520581 23.24517214 20.27485512 36.41503937 16.03109086 22.43965602
 32.59510994 33.78438794 20.55420887 25.91441489 23.37496527 17.74240561
 21.45360217 21.65660718 27.41255864 25.15738326 23.64996403 14.61343906
 15.9240983   3.86335915 29.20453051 20.82989445 22.24521707 28.00451562
 28.39269673]
梯度下降-均分误差为:
 21.42768961540712



4.1.5 梯度下降的扩展:GD、SGD、SAG



4.1.6 总结


线性回归的损失函数:均方误差


线性回归的优化方法:正规方程、梯度下降


线性回归的性能衡量方法:均方误差


4.2 欠拟合与过拟合


学习目标:


  • 说明线性回归(不带正则化)的缺点


  • 说明过拟合与欠拟合的原因以及解决方法


问题:训练数据训练的很好啊,误差也不大,为什么在测试集上有问题呢?


过拟合


4.2.1 什么是过拟合与欠拟合


欠拟合:



过拟合:






4.2.2 原因以及解决方法


欠拟合原因以及解决方法


  • 原因:学习到数据的特征过少


  • 解决方法:增加数据的特征数量


过拟合原因以及解决方法


  • 原因:学到的特征过多,存在一些嘈杂特征,模型过于复杂


  • 解决办法:正则化



1 正则化类别


  • L1正则化


  • L2正则化,更常用


L2正则化


  • 作用:可以使得其中一些W都很小,都接近于0,削弱某个特征的影响


  • 优点:越小的参数说明模型越简单,越简单的模型也不容易产生过拟合现象


  • Ridge回归


  • 加入L2正则化后的损失函数:


损失函数+惩罚项



L1正则化:


  • 作用:可以使得其中一些W的值直接为0,删除这个特征的影响


  • LASSO回归


4.3 线性回归的改进—岭回归


学习目标:


  • 说明岭回归的原理即与线性回归的不同之处


  • 说明正则化对于权重参数的影响


  • 说明L1和L2正则化的区别


4.3.1 带有L2正则化的线性回归–岭回归


岭回归,其实也是一种线性回归。只不过在算法建立回归方程时候,加上正则化的限制,从而达到解决过拟合的效果


1 API


sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True, solver='auto', normalize=False)


  • alpha:正则化力度,取值范围:0-1,1-10


  • solver:会根据数据自动选择优化方法


  • sag:如果数据集、特征都较大,选择该随机梯度下降优化


  • normalize:数据是否进行标准化


  • normalize=False:可以在fit之前调用preprocessing.StandardScaler标准化数据


  • Ridge.coef_:回归权重


  • Ridge.intercept_:回归偏置



目录
相关文章
|
机器学习/深度学习 算法 Python
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
580 7
|
机器学习/深度学习 人工智能 算法
Scikit-learn:Python机器学习的瑞士军刀
想要快速入门机器学习但被复杂算法吓退?本文详解Scikit-learn如何让您无需深厚数学背景也能构建强大AI模型。从数据预处理到模型评估,从垃圾邮件过滤到信用风险评估,通过实用案例和直观图表,带您掌握这把Python机器学习的'瑞士军刀'。无论您是AI新手还是经验丰富的数据科学家,都能从中获取将理论转化为实际应用的关键技巧。了解Scikit-learn与大语言模型的最新集成方式,抢先掌握机器学习的未来发展方向!
1415 12
Scikit-learn:Python机器学习的瑞士军刀
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
664 1
|
机器学习/深度学习 数据可视化 算法
Python与机器学习:使用Scikit-learn进行数据建模
本文介绍如何使用Python和Scikit-learn进行机器学习数据建模。首先,通过鸢尾花数据集演示数据准备、可视化和预处理步骤。接着,构建并评估K近邻(KNN)模型,展示超参数调优方法。最后,比较KNN、随机森林和支持向量机(SVM)等模型的性能,帮助读者掌握基础的机器学习建模技巧,并展望未来结合深度学习框架的发展方向。
Python与机器学习:使用Scikit-learn进行数据建模
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
|
人工智能 自然语言处理 程序员
用通义灵码开发一个Python时钟:手把手体验AI程序员加持下的智能编码
通义灵码是基于通义大模型的AI研发辅助工具,提供代码智能生成、研发问答、多文件修改等功能,帮助开发者提高编码效率。本文通过手把手教程,使用通义灵码开发一个简单的Python时钟程序,展示其高效、智能的编码体验。从环境准备到代码优化,通义灵码显著降低了开发门槛,提升了开发效率,适合新手和资深开发者。最终,你将体验到AI加持下的便捷与强大功能。
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
774 14
|
机器学习/深度学习 算法 数据可视化
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
755 1
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)

热门文章

最新文章

推荐镜像

更多