当前位置:   article > 正文

回归算法之波士顿房价预测_波士顿算法

波士顿算法

线性回归(linear regression)

 

最小二乘法

多元线性回归(含有多个特征值)

多元线性模型:(正规方程)

损失函数(误差大小)

梯度下降

我们以单变量中的w0,w1为例子:

学习率表示预测模型的斜率,即函数下降的速率

理解:沿着这个函数下降的方向找,最后就能找到山谷的最低点,然后更新W值

使用:面对训练数据规模十分庞大的任务

正规方程和梯度下降的对比

岭回归

具有l2正则化的线性最小二乘法(解决过拟合问题)

过拟合:模型过于复杂,选取的特征过多

  • 解决方法:1.进行特征选择,消除关联性大的特征

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

                         3.正则化

欠拟合:模型过于简单,选取的特征过少

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

完整代码:

  1. from sklearn.datasets import load_boston
  2. from sklearn.linear_model import LinearRegression,SGDRegressor,Ridge
  3. from sklearn.model_selection import train_test_split
  4. from sklearn.preprocessing import StandardScaler
  5. from sklearn.metrics import mean_squared_error
  6. from sklearn.externals import joblib
  7. def linear():
  8. """
  9. 线性回归预测房价
  10. :return:
  11. """
  12. #获取数据
  13. lb = load_boston()
  14. #拆分数据到训练集和测试集
  15. x_train,x_test,y_train,y_test = train_test_split(lb.data,lb.target,test_size=0.25)
  16. #标准化处理数据 防止某个特征值过大影响预测值得大小
  17. #特征值和目标值都必须标准化,防止因特征值变小导致权重过小,实例化两个标准化API
  18. std_x = StandardScaler()
  19. x_train = std_x.fit_transform(x_train)
  20. x_test = std_x.transform(x_test)
  21. #目标值 0.19版本后标准化要求传入的参数必须是二维的
  22. std_y = StandardScaler()
  23. y_train = std_y.fit_transform(y_train.reshape(-1, 1))
  24. y_test = std_y.transform(y_test.reshape(-1, 1))
  25. estimator预测
  26. 使用正规方程预测
  27. li = LinearRegression()
  28. li.fit(x_train,y_train)
  29. print("权重:",li.coef_)
  30. #使用inverse_transform将目标值转换为标准化前的数据格式
  31. y_predict = std_y.inverse_transform(li.predict(x_test))
  32. print("预测房价:",y_predict)
  33. print("真实房价:",std_y.inverse_transform(y_test))
  34. print("正规方程的均方误差:",mean_squared_error(std_y.inverse_transform(y_test),y_predict))
  35. #使用梯度下降预测
  36. sgd = SGDRegressor()
  37. sgd.fit(x_train,y_train)
  38. print("权重:", sgd.coef_)
  39. # 使用inverse_transform将目标值转换为标准化前的数据格式
  40. y_predict = std_y.inverse_transform(sgd.predict(x_test))
  41. print("预测房价:", y_predict)
  42. print("真实房价:", std_y.inverse_transform(y_test))
  43. print("梯度下降的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_predict))
  44. #岭回归预测
  45. rd = Ridge(alpha=1.0)
  46. rd.fit(x_train, y_train)
  47. print("权重:", rd.coef_)
  48. # 使用inverse_transform将目标值转换为标准化前的数据格式
  49. y_predict = std_y.inverse_transform(rd.predict(x_test))
  50. print("预测房价:", y_predict)
  51. print("真实房价:", std_y.inverse_transform(y_test))
  52. print("岭回归的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_predict))
  53. #模型的保存和加载
  54. # joblib.dump(li,'./text.pkl')
  55. # model = joblib.load('./text.pkl')
  56. # y_predict = std_y.inverse_transform(model.predict(x_test))
  57. # print("预测结果:",y_predict)
  58. return None
  59. if __name__ == "__main__":
  60. linear()

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号