多元线性回归 及其Python实现

多元线性回归 Python实现

多元线性回归求解过程

多元线性回归的形式:
在这里插入图片描述
目标函数:
在这里插入图片描述
将一个样本的向量化:

在这里插入图片描述
将所有样本的向量化:
在这里插入图片描述
向量化后的目标函数及求解结果:
在这里插入图片描述
ps.上述多元线性回归的正规方程解问题是:时间复杂度高;优点是:不需要对数据进行归一化处理。

多元线性回归的Python实现:

import numpy as np
#r2_score、train_test_split方法封装在kNN文件下,直接调用
import sys
sys.path.append("..")
from kNN.metrics import r2_score
from sklearn import datasets
from kNN.model_selection import train_test_split

class LinearRegression:
  def __init__(self):
    '''初始化模型'''
    self.coef_ = None
    self.interception_ = None
    self._theta = None

  def fit_normal(self,X_train,y_train):
    '''根据训练数据集X_train,y_train训练模型'''
    assert X_train.shape[0] == y_train.shape[0],'the number of X_train must equal to the number of y_train'
    X_b = np.hstack([np.ones((len(X_train),1)),X_train])
    self._theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y_train)
    self.interception_ = self._theta[0]
    self.coef_ = self._theta[1:]
    return self
    
  def predict(self,X_predict):
    assert self._theta is not None,'must fit before predict'
    assert X_predict.shape[1] == len(self.coef_),'the feature number of X_predict must equal to X_train '

    X_b = np.hstack([np.ones((len(X_predict),1)),X_predict])
    return X_b.dot(self._theta)

  def score(self,X_test,y_test):
    '''根据测试数据集确定当前模型的准确度'''
    y_predict = self.predict(X_test)
    return r2_score(y_test,y_predict)
  
  def __repr__(self):
    return 'LinearRegression()'

#使用
boston = datasets.load_boston()

x = boston.data
y = boston.target  
x = x[y<50.0]
y = y[y<50.0]

X_train,X_test,y_train,y_test = train_test_split(x,y,seed = 666)

reg = LinearRegression()
reg.fit_normal(X_train,y_train)
y_predict = reg.predict(X_test)
print(r2_score(y_test,y_predict))

scikit-learn中的线性回归使用

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn import datasets


boston = datasets.load_boston()

X = boston.data
y = boston.target  
X = X[y<50.0]
y = y[y<50.0]

X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=666)

reg = LinearRegression()
reg.fit(X_train,y_train)

print(reg.coef_)
print(reg.intercept_)
print(reg.score(X_test,y_test))

衡量线性回归法的指标

均方误差(Mean Squared Error)

在这里插入图片描述

均方根误差(Root Mean Squared Error)

在这里插入图片描述
有助于消除量纲的不同。

平均绝对误差(Mean Absolute Error)

在这里插入图片描述

R Squared

MSE、RMSE 和 MAE 的局限性在于对模型的衡量只能做到数值越小表示模型越好,而通常对模型的衡量使用1表示最好,0表示最差,因此引入了新的指标:R Squared,计算公式为:
在这里插入图片描述
可以转化为:
在这里插入图片描述

线性回归的可解释性和更多思考

线性回归的优点——具有可解释性:所求得的每个特征所对应的θ,其正负代表结果与其正相关还是负相关,绝对值大小表示相关性的强弱程度。
线性回归是典型的参数学习;kNN为非参数学习。
线性回归只能解决回归问题;kNN既可以解决分类问题,又可以解决回归问题。
在使用线性回归算法时,对数据有假设:数据具有线性关系。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值