zoukankan      html  css  js  c++  java
  • 机器学习系列(4) 线性回归

    多元线性回归

    一、多元回归的基本假设

    1. 线性性和可加性
      线性性:X1每变动一个单位,Y相应变动a1个单位,与X1的绝对数大小无关
      可加性:X1对Y的影响独立于其他变量
    2. 误差性之间相互独立
    3. 自变量之间相互独立
    4. 误差项的方差应该为常数
    5. 误差项应该呈正太分布

    二、线性回归的基本原理

    1.线性回归的任务,就是构造一个预测函数来映射特征矩阵X和标签值y的线性关系,这个预测函数本质急救室我们需要构建的模型,构建预测函数的核心就是找出模型的参数向量w

    我们首先定义损失函数,然后通过最小化损失函数的某种变化来求解参数向量,以此将单纯的求解问题转化为一个最优化问题,在多元线性回归中,我们损失函数定义如下

    这个损失函数代表了向量y - y的L2范式平方结果,L2范式本质是欧式距离,y和y分别为真实标签和预测值,损失函数实在计算真实标签和预测值之间的距离。这个损失函数哼浪了我们构造的模型的预测结果和真实标签的差异,因此我们希望预测结果和真实结果差异性越小越好,我们把目标转化为

    三、代码实现

    导入数据集

    from sklearn.linear_model import LinearRegression as LR
    from sklearn.model_selection import train_test_split
    from sklearn.model_selection import cross_val_score
    from sklearn.datasets import fetch_california_housing as fch
    import pandas as pd
    housevalue = fch()
    X = pd.DataFrame(housevalue.data)
    y = housevalue.target
    print(X.shape, y.shape)
    print(housevalue.feature_names)
    X.columns = housevalue.feature_names
    

    训练集测试集拆分

    # 训练集测试集划分
    x_train,x_test, y_train,y_test = train_test_split(X, y, test_size=0.3, random_state = 420)
    for i in [x_train, x_test]:
        i.index = range(i.shape[0])
    x_train.shape
    
    

    建模

    # 建模 
    reg = LR().fit(x_train, y_train)
    yhat = reg.predict(x_test)
    yhat
    # 模型具体参数
    reg.coef_
    *zip(x_train.columns, reg.coef_)]  # 参数
    # 截距
    reg.intercept_
    

    模型评估

    # 模型评估
    from sklearn.metrics import mean_squared_error as MSE
    MSE(yhat, y_test) # 均方误差
    # r2
    from sklearn.metrics import r2_score
    r2_score(yhat, y_test)
    r2 = reg.score(x_test,y_test)
    r2
    
  • 相关阅读:
    Java GUI学习心得
    Kettle6.0表输入连接数据库
    理解javascript继承 Minoz
    理解作用域 Minoz
    深入理解javascript作用域链 Minoz
    JavaScript数组总结 Minoz
    收获2.css圆角总结 Minoz
    一次前端作业的收获 Minoz
    深入理解闭包 Minoz
    理解javascript原型与原型链 Minoz
  • 原文地址:https://www.cnblogs.com/yangjiez/p/12106423.html
Copyright © 2011-2022 走看看