1. 多元線性回歸的正規方程解

每個樣本有多個特征
向量化
, 其中
是樣本矩陣X前面加上一列1
目标: 使
盡可能的小---向量化了,提高運算效率
多元線性回歸的正規方程解:
求出:
缺點: 時間複雜度高:O(n^3)
優點:不需要考慮量綱的問題
2. 多元線性回歸的實作
每個系數對應一個特征,系數可以用于描述每個特征對于結果的貢獻程度
是以實作的時候是将截距和系數分開傳回給使用者
封裝成類:
import numpy as np
from sklearn.metrics import r2_score #r^2評價方式(取值範圍是0-1,越大說明性能越好)
class LinearRegression:
def __init__(self):
"""初始化模型"""
self.coef_ = None #系數
self.interception_ = None #截距
self._theta = None
def fit_normal(self, X_train, y_train):
"""根據訓練資料集訓練模型---采用正規方程的解法"""
assert X_train.shape[0] == y_train.shape[0]
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):
"""傳回表示X_predict的結果向量"""
assert self.coef_ is not None and self.interception_ is not None
assert X_predict.shape[1] == len(self.coef_)
X_b = np.hstack([np.ones((len(X_predict), 1)), X_predict])
y_predict = X_b.dot(self._theta)
return y_predict
def score(self, X_test, y_test):
y_predict = self.predict(X_test)
return r2_score(y_test, y_predict)
def __repr__(self):
"""多元線性回歸"""
調用:
from sklearn import datasets
boston = datasets.load_boston()
X = boston.data
y = boston.target
X = X[y < 50.0]
y = y[y < 50.0]
# 劃分資料集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)
# 模型
from LinearRegression import LinearRegression
reg = LinearRegression()
reg.fit_normal(X_train, y_train)
print(reg.coef_)
print(reg.score(X_test, y_test))
3. sklearn中的調用
from sklearn.linear_model import LinearRegression
reg = LinearRegression()
reg.fit(X_train, y_train)
# 檢視系數和截距
print(reg.coef_)
print(reg.intercept_)
print(reg.score(X_test, y_test))
4. 使用KNN解決回歸問題
from sklearn.neighbors import KNeighborsRegressor
使用網格搜尋确定最好的超參數(from sklearn.model_selection import GridSearchCV)
5. 線性回歸的可解釋性
可以通過可解釋性采集有助于分類的更多特征
6. 線性回歸特點總結
典型的參數學習
隻能解決回歸問題
對資料有假設,線性
對資料具有強解釋性
對比KNN:
非參數學習
回歸分類問題都能解決
對資料沒有假設
前面都是使用多元線性回歸的正規方程解,複雜度大
後面将介紹梯度下降法