多元线性回归 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既可以解决分类问题,又可以解决回归问题。
在使用线性回归算法时,对数据有假设:数据具有线性关系。