1.线性回归是什么?
线性回归是利用数理统计中的回归分析,来确定两种或者两种以上变量间相互依赖的定量关系的一种统计分析方法。主要分为一元线性回归和多元线性回归。
2.线性回归解决什么问题?
线性回归主要是通过对大量观测数据的处理,找到变量与变量之间的规律所在,最后得到符合规律的数学表达式。所以说线性回归解决的通过已知数据去预测未来的结果这类的问题。比如说房价的预测,电影票房的预测等等。
3.线性回归的数学表达式
其中为自变量,为因变量,为相关系数,为偏置项。
4.线性回归的损失函数(loss)
利用梯度下降法,找到损失函数的最低点,得到参数。
5.解决过拟合和欠拟合问题
5.1 L1正则化(Lasso回归)
L1正则化可以使某些特征的系数变小,可以提高模型的泛化能力。对于高维的特征数据可以选择L1正则化。
5.2 L2正则化(岭回归)
L2正则化主要用于对于线性回归拟合的不是很好的情况。
5.3 ElasticNet回归
ElasticNet回归主要用于用Lasso回归太过,而岭回归不够的情况下。
6 代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Lasso
from sklearn.linear_model import Ridge
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
boston = load_boston()
x_train, x_test, y_train, y_test = train_test_split(boston.data,boston.target, test_size=0.15, random_state=1)
scaler = StandardScaler()
x_train = scaler.fit_transform(x_train)
x_test = scaler.transform(x_test)
clf1 = LinearRegression()
clf2 = Lasso(alpha=0.01)
clf3 = Ridge(alpha=0.01)
clf1.fit(x_train,y_train)
pred1 = clf1.predict(x_test)
clf2.fit(x_train,y_train)
pred2 = clf2.predict(x_test)
clf3.fit(x_train,y_train)
pred3 = clf3.predict(x_test)
score1, score2, score3 = clf1.score(x_train,y_train), clf2.score(x_train,y_train), clf3.score(x_train,y_train)
print(score1, score2, score3)
label = ['LinearRegression predict','Lasso predict','Ridge predict']
pred = [pred1,pred2,pred3]
for i in range(3):
plt.figure(figsize=(12,6))
plt.plot(y_test, linewidth=3, c='b',label='ground price')
plt.plot(pred[i], linewidth=3, c='r', label=label[i])
plt.legend(loc='best')
plt.xlabel('test data points')
plt.ylabel('price')
plt.show()