• 机器学习(二)线性回归


    一、简单线性回归

            1.原理

                   原型公式: y=b_{0}+b_{1}*x_{1}        为一条直线

                     拟合:使误差(垂直差)平方和最小

                            使用平方和是因为取的是欧氏距离

             2.Python中的处理

                    ①设置工作路径

                    ②数据预处理

                            引入常用库、读入数据(自变量+因变量)、分成训练集和测试集

                    ③创建和使用回归器

    1. from sklearn.liner_model import LinerReggression --导入线性回归类
    2. regressor = LinerRegression() --线性回归对象
    3. regressor.fit(x_train,y_train) --拟合模型
    4. y_pred = regressor.predict(x_test) --预测 参数为自变量矩阵

                    ④图像绘制

    1. import matplotlib.pyplot as plt --导入标准绘图库
    2. plt.scatter(x_train,y_train,color = 'red') --绘制点(x轴数据,y轴数据,着色)
    3. plt.plot(x_train,regressor.predict(x_train), color = 'blue') --绘制线
    4. plt.title('测试数据与预测数据对比') --标题
    5. plt.xlable('工作年限') --x轴标签
    6. plt.ylable('薪水') --y轴标签
    7. plt.show() --显示图像

     二、多元线性回归

            1.原理

                    原型公式:y=b_{0}+b_{1}*x_{1}+b_{2}*x_{2}+...+b_{n}*x_{n}        多项式

                    限定条件:      ①数据是线性

                                            ②数据要有同样的方差

                                            ③数据要呈现多元正态分布

                                            ④误差相互独立

                                            ⑤无多重共线性(自变量不和其他自变量呈线性关系)

                    虚拟变量:将标签进行编码

                             虚拟变量的陷阱:如示例中的情况,纽约州和加州存在互斥关系,其关系可以表达为:D_{2}=1-D_{1} ,即两者存在线性关系,不符合 ⑤(无多重共线性)。过多的参数可能造成参数维度溢出,从而造成过度拟合

                                    为解决此问题,进行拟合时,必须省略掉编码组中的一组数据

            2.建立多元线性回归模型

                    ①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个自变量的模型个数为:2^{N}-1

                            step2:选择打分最高的模型

            3.Python处理

                    ①数据预处理

                            其中标签项需要进行分类数据处理

    1. from sklearn.preprocessing import LabelEncoder,OneHotEncoder --导入库
    2. labelencoder_x=LabelEncoder --编码器对象
    3. x[:,3] = labelencoder_x.fit_transform(x[:,3]) --创建对象
    4. onehotenccoder = OneHotEncoder(categorical_features = [0]) --创建对象
    5. x = onhotencoder.fit_transform(x).toarry() --转换

                            处理虚拟变量陷阱(实际上库里自带此功能)

    x = x[:,1:]    --去除x的第0

                    ②创建回归器并进行拟合

    1. from sklearn.linear_model import LinearRegression --引入库
    2. regressor = LinearRegression() --创建对象
    3. regressor.fit(x_train,y_train) --拟合
    4. y_pred = regressor.predict(x_test) --预测

                    ③统计显著性处理

                            示例为反向淘汰算法

    1. import statsmodels.formula.api as sm --导入库
    2. x_train = np.append(arr = np.ones(40,1),values = x_train,axis=1)
    3. --添加一列(为常数项b0乘1,作为一个自变量)
    4. --np->numpy
    1. x_opt = x_train[:,[0,1,2,3,4,5]] --最佳选项初始化
    2. regressor_OLS = sm.OLS(endog=y_train,exog=x_opt).fit() --因变量,自变量(并进行拟合)
    3. regressor_OLS.summary() --找出最大P值
    4. x_opt = x_train[:,[0,1,3,4,5]] --剔除2
    5. regressor_OLS = sm.OLS(endog=y_train,exog=x_opt).fit()
    6. regressor_OLS.summary()
    7. --反复剔除
  • 相关阅读:
    Android之Handler(上)
    ORB-SLAM3在保存地图时高频率崩溃问题
    Java注解与反射知识梳理
    Learn Prompt- Midjourney 图片生成:Image Prompts
    微信支付步骤
    QPainter基本绘图【1】
    [尚硅谷React笔记]——第1章 React简介
    滚动条设置
    04. 组合总和
    Android 用户空间 Native Crash Issues 分析
  • 原文地址:https://blog.csdn.net/weixin_37878740/article/details/126242954