原型公式:
为一条直线

拟合:使误差(垂直差)平方和最小
使用平方和是因为取的是欧氏距离

引入常用库、读入数据(自变量+因变量)、分成训练集和测试集
- from sklearn.liner_model import LinerReggression --导入线性回归类
- regressor = LinerRegression() --线性回归对象
-
- regressor.fit(x_train,y_train) --拟合模型
-
- y_pred = regressor.predict(x_test) --预测 参数为自变量矩阵
- import matplotlib.pyplot as plt --导入标准绘图库
-
- plt.scatter(x_train,y_train,color = 'red') --绘制点(x轴数据,y轴数据,着色)
- plt.plot(x_train,regressor.predict(x_train), color = 'blue') --绘制线
-
- plt.title('测试数据与预测数据对比') --标题
- plt.xlable('工作年限') --x轴标签
- plt.ylable('薪水') --y轴标签
-
- plt.show() --显示图像

原型公式:
多项式
限定条件: ①数据是线性的
②数据要有同样的方差
③数据要呈现多元正态分布
④误差相互独立
⑤无多重共线性(自变量不和其他自变量呈线性关系)
虚拟变量:将标签进行编码

虚拟变量的陷阱:如示例中的情况,纽约州和加州存在互斥关系,其关系可以表达为:
,即两者存在线性关系,不符合 ⑤(无多重共线性)。过多的参数可能造成参数维度溢出,从而造成过度拟合。
为解决此问题,进行拟合时,必须省略掉编码组中的一组数据。
①All-in:将所有数据应用在模型之中
②反向淘汰:
step1:定义自变量对模型影响力的门槛
step2:使用All-in对模型进行拟合
step3:使用自变量计算P值(影响力);若此自变量大于门槛值,则执行step4;否则算法终止
step4:移除P值最高的自变量
step5:循环step3->step5,直至所有P值小于门槛值
③顺向选择:
step1:定义自变量对模型影响力的门槛
step2:对每个自变量进行简单线性回归拟合,选取其中P值最低的自变量
step3:将选取的自变量加入模型,再将剩下的自变量加入模型运算,得到其P值;选取其中最低的P值,若其低于门槛值,则将其加入模型。
step4:循环step3->step4,直至所有剩下的自变量的P值大于门槛值
④双向淘汰:
step1:设置两个门槛值
step2:进行顺向选择
step3:进行反向淘汰
step5:循环step2->step3,直至满足两个门槛值
⑤信息量比较:
step1:对所有可能的模型进行打分(N个自变量的模型个数为:
)
step2:选择打分最高的模型
其中标签项需要进行分类数据处理
- from sklearn.preprocessing import LabelEncoder,OneHotEncoder --导入库
- labelencoder_x=LabelEncoder --编码器对象
- x[:,3] = labelencoder_x.fit_transform(x[:,3]) --创建对象
- onehotenccoder = OneHotEncoder(categorical_features = [0]) --创建对象
- x = onhotencoder.fit_transform(x).toarry() --转换
处理虚拟变量陷阱(实际上库里自带此功能)
x = x[:,1:] --去除x的第0列
- from sklearn.linear_model import LinearRegression --引入库
- regressor = LinearRegression() --创建对象
- regressor.fit(x_train,y_train) --拟合
-
- y_pred = regressor.predict(x_test) --预测
示例为反向淘汰算法
- import statsmodels.formula.api as sm --导入库
- x_train = np.append(arr = np.ones(40,1),values = x_train,axis=1)
- --添加一列(为常数项b0乘1,作为一个自变量)
- --np->numpy
- x_opt = x_train[:,[0,1,2,3,4,5]] --最佳选项初始化
- regressor_OLS = sm.OLS(endog=y_train,exog=x_opt).fit() --因变量,自变量(并进行拟合)
- regressor_OLS.summary() --找出最大P值
-
- x_opt = x_train[:,[0,1,3,4,5]] --剔除2
- regressor_OLS = sm.OLS(endog=y_train,exog=x_opt).fit()
- regressor_OLS.summary()
-
- --反复剔除