多元线性回归 及其Python实现

多元线性回归 Python实现

多元线性回归求解过程

多元线性回归的形式:
多元线性回归 及其Python实现_第1张图片
目标函数:
多元线性回归 及其Python实现_第2张图片
将一个样本的向量化:

多元线性回归 及其Python实现_第3张图片
将所有样本的向量化:
多元线性回归 及其Python实现_第4张图片
向量化后的目标函数及求解结果:
多元线性回归 及其Python实现_第5张图片
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)

多元线性回归 及其Python实现_第6张图片

均方根误差(Root Mean Squared Error)

多元线性回归 及其Python实现_第7张图片
有助于消除量纲的不同。

平均绝对误差(Mean Absolute Error)

多元线性回归 及其Python实现_第8张图片

R Squared

MSE、RMSE 和 MAE 的局限性在于对模型的衡量只能做到数值越小表示模型越好,而通常对模型的衡量使用1表示最好,0表示最差,因此引入了新的指标:R Squared,计算公式为:
多元线性回归 及其Python实现_第9张图片
可以转化为:
多元线性回归 及其Python实现_第10张图片

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

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

你可能感兴趣的:(MachineLearning,Python)