1 一次线性回归
误差服从均值为0方差为θ2的高斯分布
损失函数,用于定义和衡量模型的误差,实际点到预测平面的垂直距离。
如何评价模型?
决定系数 R方 ,衡量数据和回归线的贴近程度。
r*2=LinearRegression().score(test_x,test_y)
1.2代码实现方式
import pandas as pd
import numpy as np
x=np.linspace(1,16,16)
y=2*x+2*np.random.rand()
df1=pd.DataFrame({
'x': x,
'y': y
})
print(df1)
df2=df1[:-2]
print(df2)
#--------------最小二乘回归----------------
from sklearn.linear_model import LinearRegression
model=LinearRegression()
x=np.array(df2['x']).reshape([-1,1])
y=np.array(df2['y']).reshape([-1,1])
model.fit(x,y)
predict1=model.predict(np.array([16]).reshape([-1,1]))
print('最小二乘',predict1)
#---------岭回归----------
from sklearn.linear_model import Ridge
model2=Ridge(alpha=.5)
model2.fit(x,y)
predict2=model2.predict(np.array([16]).reshape([-1,1]))
print('岭回归的结果是',predict2)
#-------Lasso回归------------
from sklearn.linear_model import Lasso
model3=Lasso(alpha=.5)
model3.fit(x,y)
predict3=model3.predict(np.array([16]).reshape([-1,1]))
print('Lasso回归的结果',predict3)
2 复杂线性回归
通过构造系数的 polynomial features 来扩展一个简单的线性回归。在标准线性回归的情况下,你可能有一个类似于二维数据的模型:
如果我们想把抛物面拟合成数据而不是平面,我们可以结合二阶多项式的特征,使模型看起来像这样:
观察到这 还是一个线性模型 (这有时候是令人惊讶的): 看到这个,想象创造一个新的变量
有了这些重新标记的数据,我们可以将问题写成
我们看到,所得的 polynomial regression 与我们上文所述线性模型是同一类(即关于 是线性的),因此可以用同样的方法解决。通过用这些基函数建立的高维空间中的线性拟合,该模型具有灵活性,可以适应更广泛的数据范围。
方式,通过 :
poly=PolynomialFeatures(degree=2)
p1=poly.fit_transform(x)
的方式,把x1,x2转变成 p1=[1,x1,x2,x1^2,x1x2,x2^2]
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline
x=np.arange(100)
print(x)
model=Pipeline( [
('poluy',PolynomialFeatures(degree=3)) ,
('linear',LinearRegression(fit_intercept=False)) ]
)
y=2+2*x+3*x**2+x**3
x=np.array(x).reshape([-1,1])
y=np.array(y).reshape([-1,1])
model=model.fit(x,y)
coe=model.named_steps['linear'].coef_
print(coe)