当前位置:   article > 正文

机器学习-DAY08_对特征值和目标值标准化话

对特征值和目标值标准化话

1.线性回归

线性关系模型:

 

因变量可理解为目标值

损失函数:即为误差大小,误差平方和(最小二乘法

求解模型中的W可以缩小误差

 

梯度下降需要手动制定学习率

 

 

线性回归时算法对比:

 scikit-learn :优点:封装好,建立模型简单,预测简单

                        缺点:算法的过程,有些参数都在算法API内部优化

TensorFlow :封装高低都有,自己实现线性回归

2.使用sklearn实现波士顿房价预测

特征值

 

 注意:线性回归案例中数据需要进行标准化处理,避免因为某个特征数值过大对结果产生影响

from sklearn.metrics import mean_squared_error   # 线性回归性能评估

 

 官网建议:样本数量大于10万使用梯度下降SGDRegressor

                   样本数量小于10万使用正规方程LinearRegression

 

 

 3.过拟合和欠拟合

 

 线性回归:线性关系的数据(直线的关系)

                   非线性关系(曲线的关系)

模型复杂的原因:数据的特征和目标值的关系不仅仅是线性关系

欠拟合原因及解决方法:

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

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

过拟合原因及解决方法:

        原因:原始特征过多,存在一些嘈杂特征,模型过于复杂是因为模型尝试去兼顾各个测试数据点

        解决方法:进行特征选择,消除关联性大的特征(很难做)

                          交叉验证(让所有数据都有过训练)

                          正则化(了解)

根据结果现象判断是过拟合还是欠拟合,交叉验证:训练集、测试集都不行是欠拟合;训练集很好,测试集不行是过拟合。

回归解决过拟合的方式:

        线性回归:LinearRegression容易出现过拟合,为了把训练集数据表现更好

        L2正则化:Ridge岭回归  带有正则化的线性回归

带有正则化的线性回归-Ridge岭回归

 线性回归岭LinearRegression与Ridge回归对比:

        岭回归:回归得到的回归系数更符合实际,更可靠。另外,能让估计参数的波动范围变小,变的更稳定。在存在病态数据偏多的研究中有较大的实用价值。

 

  1. # import matplotlib.pyplot as plt
  2. #
  3. # plt.figure(figsize=(10,10))
  4. # plt.scatter([60,72,75,80,83], [126,151.2,157.5,168,174.3])
  5. # plt.show()
  6. from sklearn.datasets import load_boston # 加载波士顿房价数据
  7. from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge # 回归预测时使用的API:正规方程/梯度下降/岭回归
  8. from sklearn.model_selection import train_test_split # 数据分割
  9. from sklearn.preprocessing import StandardScaler # 标准化
  10. from sklearn.metrics import mean_squared_error # 线性回归性能评估
  11. import numpy as np
  12. def mylinear():
  13. """
  14. 线性回归直接预测房子价格
  15. :return:
  16. """
  17. # 获取数据
  18. lb = load_boston()
  19. # 分隔数据集到训练集和测试集
  20. x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)
  21. print(y_train, y_test)
  22. # 进行标准化处理
  23. # 特征值和目标值都进行标准化处理,目标值还需再转换回来,实例化两个标准化API
  24. std_x = StandardScaler()
  25. x_train = std_x.fit_transform(x_train.reshape(-1, 1)) # x_train.reshape(-1, 1) 把一维数据改成二维
  26. x_test = std_x.transform(x_test.reshape(-1, 1))
  27. std_y = StandardScaler()
  28. y_train = std_y.fit_transform(y_train.reshape(-1, 1))
  29. y_test = std_y.transform(y_test.reshape(-1, 1))
  30. print(x_train.shape)
  31. print(y_train.shape)
  32. # estimator预测
  33. # 正规方程求解方式预测结果
  34. lr = LinearRegression()
  35. lr.fit(x_train[0:379], y_train) # 该处与视频不同,必须保持fit两个参数长度一致,这是数据量过少导致的
  36. print("lr权重参数:", lr.coef_) # 打印权重参数
  37. # 预测测试集的房子价格
  38. y_lr_predict = std_y.inverse_transform(lr.predict(x_test))
  39. print("lr测试集中每个房子的预测价格:", y_lr_predict)
  40. print("正规方程的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_lr_predict[0:127]))
  41. # 梯度下降进行房价预测
  42. sgd = SGDRegressor()
  43. sgd.fit(x_train[0:379], y_train) # 该处与视频不同,必须保持fit两个参数长度一致
  44. print("sgd权重参数:", sgd.coef_) # 打印权重参数
  45. # 预测测试集的房子价格
  46. y_sgd_predict = std_y.inverse_transform(sgd.predict(x_test))
  47. print("sgd测试集中每个房子的预测价格:", y_sgd_predict)
  48. print("梯度下降的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_sgd_predict[0:127]))
  49. # 岭回归进行房价预测
  50. rd = Ridge(alpha=1.0) # alpha可以在0-1之间,或者1-10之间
  51. rd.fit(x_train[0:379], y_train) # 该处与视频不同,必须保持fit两个参数长度一致
  52. print("Ridge权重参数:", rd.coef_) # 打印权重参数
  53. # 预测测试集的房子价格
  54. y_rd_predict = std_y.inverse_transform(rd.predict(x_test))
  55. print("Ridge测试集中每个房子的预测价格:", y_rd_predict)
  56. print("岭回归的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_rd_predict[0:127]))
  57. return None
  58. if __name__ == "__main__":
  59. mylinear()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/72915?site
推荐阅读
相关标签
  

闽ICP备14008679号