zoukankan      html  css  js  c++  java
  • 第三章 线性回归

    第三章 线性回归

    3.1 问题引入

    线性回归就是使用曲线(直线,真曲线)来拟合数据点,进而得到数据中因变量与自变量的关系达到预测的目的。是值到值得预测。

    import numpy as np
    #生成20个点
    x = np.linspace(0,10,20)
    #映射为2纬数据关系
    y = np.array(3 * x + 1)
    #设置噪音
    noise = np.random.randint(-1,1,20)
    #打印散点图
    plt.scatter(x,y + noise)
    plt.xlabel('x')
    plt.ylabel('y')
    plt.savefig('linspace')
    plt.show()

    上图表示了一批线性分布数据,而机器学习要做的如下图。

    红色直线就是线性回归的拟合效果。

    3.2 线性回归模型

    3.2.1 模型建立

    线性回归模型,其实是两种模型中的判别式。因为我们知道判别式模型就是使用公式或者概率来直接输出做预测的模型。

    线性回归模型的种类一般为,一元线性回归;多元线性回归这都属于一次的;还可以有各种曲线回归都行。

    函数式,也叫假设空间:

    H(x) = W X + b

    这里的W是权重向量,X表示样本数据,b是偏置项。这里W的维度与X的特征数相同,点积求和操作。

    有了假设空间也就是模型之后我们考虑机器学习三要素,还要有策略和算法。结合回归模型,我们选取的策略也就是损失函数一般是均方差,然后算法也就是优化方法选择得是梯度下降。这里涉及经验风险的最优化问题与梯度下降,都是数学中的链式法则求解。可以查阅相关知识手推一下。

    3.2.2 线性回归建模流程

    1. 确定输入输出

    2. 选择合适的回归模型

    3. 初始化权重和偏置

    4. 在训练集中随机选取数据进行模型更新

    5. 迭代训练

    3.3 使用sklearn实现线性回归

    #导入绘图模块
    import matplotlib.pyplot as plt
    #导入波士顿数据集,sklearn库的datasets模块内涵很多已有数据集
    from sklearn.datasets import load_boston
    #导入线性回归模型,传统LR模型,Laaao回归模型,Ridge回归模型,ElasticNet回归哦行
    from sklearn.linear_model import LinearRegression,Lasso,Ridge,ElasticNet
    #导入数据标准化模块
    from sklearn import preprocessing
    #导入划分数据集模块,也可以自己切片划分
    from sklearn.model_selection import train_test_split
    ​
    #导入数据
    data = load_boston()
    #输出数据维度
    print(data.data.shape)
    #输出数据
    print(data.data)
    #输出数据标签
    print(data.target)
    ​
    #划分测试集雨验证集,data.data是X,data.target是标签Y,test_size是测试集比例
    train_x,test_x,train_y,test_y = train_test_split(data.data,data.target,test_size=0.2)
    #查看划分维度是否对齐
    print(train_x.shape,train_y.shape)
    print(test_x.shape,test_y.shape)
    ​
    #数据标准化
    #导入数据标准化方法,归一化
    scaler = preprocessing.StandardScaler()
    #注意标签是不用归一化的
    train_x_scaler = scaler.fit_transform(train_x)
    test_x_scaler = scaler.fit_transform(test_x)
    #查看归一化效果
    print(test_x_scaler[0:10])
    ​
    #模型训练
    #使用最简单的模型训练
    model_lr = LinearRegression().fit(train_x_scaler,train_y)
    ​
    #模型测试
    y_pred_lr = model_lr.predict(test_x_scaler)
    ​
    #评估预测
    print("训练集:", model_lr.score(train_x_scaler, train_y))
    print("测试集:", model_lr.score(test_x_scaler, test_y))
    print('权重参数',model_lr.coef_)
    print('偏置参数 ',model_lr.intercept_)
    ​
    #模型保存
    import joblib
    joblib.dumb(model_lr,file_path)

    输出: 训练集:
    0.7350117186188968 测试集: 0.756913836466261 权重参数 [-0.98513255 0.90956824 0.23210287 0.80325878 -2.33112162 2.69152887 0.07504261 -3.22294653 2.69543339 -1.95646929 -2.01850215 0.84922147 -3.90754852] 偏置参数 22.651980198019814

    这里使用的是最简单的线性回归方程,也没有调整参数。有兴趣的可以试试其他模型的效果。

    线性回归模型对应的是linear_model.LinearRegression类;除此之外,还有基于L1正则化的Lasso回归(Lasso Regression),基于L2正则化的线性回归(Ridge Regression),以及基于L1和L2正则化融合的Lasso CNet回归(ElasticNetRegression)

     

     

  • 相关阅读:
    老李推荐:第14章7节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-获取版本号 2
    老李推荐:第14章7节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-获取版本号 1
    老李推荐:第14章6节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-启动ViewServer
    老李推荐:第14章5节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态
    老李推荐:第14章4节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-端口转发 3
    老李推荐:第14章4节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-端口转发 2
    mybatis-generator : 自动生成代码
    mybatis-generator XML Parser Error on line 38: 必须为元素类型 "table" 声明属性 "enableInsertByPrimaryKey"。
    server.properties 文件详解
    Java 生成 JNI 头文件
  • 原文地址:https://www.cnblogs.com/peiziming/p/13269592.html
Copyright © 2011-2022 走看看