赞
踩
多元线性模型:(正规方程)
我们以单变量中的w0,w1为例子:
学习率表示预测模型的斜率,即函数下降的速率
理解:沿着这个函数下降的方向找,最后就能找到山谷的最低点,然后更新W值
使用:面对训练数据规模十分庞大的任务
具有l2正则化的线性最小二乘法(解决过拟合问题)
过拟合:模型过于复杂,选取的特征过多
2.交叉验证(让所有数据都有过训练)
3.正则化
欠拟合:模型过于简单,选取的特征过少
完整代码:
- from sklearn.datasets import load_boston
- from sklearn.linear_model import LinearRegression,SGDRegressor,Ridge
- from sklearn.model_selection import train_test_split
- from sklearn.preprocessing import StandardScaler
- from sklearn.metrics import mean_squared_error
- from sklearn.externals import joblib
-
- def linear():
- """
- 线性回归预测房价
- :return:
- """
- #获取数据
- lb = load_boston()
-
- #拆分数据到训练集和测试集
- x_train,x_test,y_train,y_test = train_test_split(lb.data,lb.target,test_size=0.25)
-
- #标准化处理数据 防止某个特征值过大影响预测值得大小
- #特征值和目标值都必须标准化,防止因特征值变小导致权重过小,实例化两个标准化API
- std_x = StandardScaler()
- x_train = std_x.fit_transform(x_train)
- x_test = std_x.transform(x_test)
-
- #目标值 0.19版本后标准化要求传入的参数必须是二维的
- std_y = StandardScaler()
- y_train = std_y.fit_transform(y_train.reshape(-1, 1))
- y_test = std_y.transform(y_test.reshape(-1, 1))
-
- estimator预测
- 使用正规方程预测
- li = LinearRegression()
- li.fit(x_train,y_train)
-
- print("权重:",li.coef_)
- #使用inverse_transform将目标值转换为标准化前的数据格式
- y_predict = std_y.inverse_transform(li.predict(x_test))
- print("预测房价:",y_predict)
- print("真实房价:",std_y.inverse_transform(y_test))
- print("正规方程的均方误差:",mean_squared_error(std_y.inverse_transform(y_test),y_predict))
-
- #使用梯度下降预测
- sgd = SGDRegressor()
- sgd.fit(x_train,y_train)
-
- print("权重:", sgd.coef_)
- # 使用inverse_transform将目标值转换为标准化前的数据格式
- y_predict = std_y.inverse_transform(sgd.predict(x_test))
- print("预测房价:", y_predict)
- print("真实房价:", std_y.inverse_transform(y_test))
- print("梯度下降的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_predict))
-
- #岭回归预测
- rd = Ridge(alpha=1.0)
- rd.fit(x_train, y_train)
-
- print("权重:", rd.coef_)
- # 使用inverse_transform将目标值转换为标准化前的数据格式
- y_predict = std_y.inverse_transform(rd.predict(x_test))
- print("预测房价:", y_predict)
- print("真实房价:", std_y.inverse_transform(y_test))
- print("岭回归的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_predict))
-
- #模型的保存和加载
- # joblib.dump(li,'./text.pkl')
- # model = joblib.load('./text.pkl')
- # y_predict = std_y.inverse_transform(model.predict(x_test))
- # print("预测结果:",y_predict)
- return None
-
- if __name__ == "__main__":
- linear()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。