天天看點

5-7 多元線性回歸1. 多元線性回歸的正規方程解2. 多元線性回歸的實作3. sklearn中的調用4. 使用KNN解決回歸問題5. 線性回歸的可解釋性6. 線性回歸特點總結

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

5-7 多元線性回歸1. 多元線性回歸的正規方程解2. 多元線性回歸的實作3. sklearn中的調用4. 使用KNN解決回歸問題5. 線性回歸的可解釋性6. 線性回歸特點總結

每個樣本有多個特征

向量化

5-7 多元線性回歸1. 多元線性回歸的正規方程解2. 多元線性回歸的實作3. sklearn中的調用4. 使用KNN解決回歸問題5. 線性回歸的可解釋性6. 線性回歸特點總結

, 其中

5-7 多元線性回歸1. 多元線性回歸的正規方程解2. 多元線性回歸的實作3. sklearn中的調用4. 使用KNN解決回歸問題5. 線性回歸的可解釋性6. 線性回歸特點總結

是樣本矩陣X前面加上一列1

5-7 多元線性回歸1. 多元線性回歸的正規方程解2. 多元線性回歸的實作3. sklearn中的調用4. 使用KNN解決回歸問題5. 線性回歸的可解釋性6. 線性回歸特點總結

目标: 使

5-7 多元線性回歸1. 多元線性回歸的正規方程解2. 多元線性回歸的實作3. sklearn中的調用4. 使用KNN解決回歸問題5. 線性回歸的可解釋性6. 線性回歸特點總結

盡可能的小---向量化了,提高運算效率

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

求出: 

5-7 多元線性回歸1. 多元線性回歸的正規方程解2. 多元線性回歸的實作3. sklearn中的調用4. 使用KNN解決回歸問題5. 線性回歸的可解釋性6. 線性回歸特點總結

缺點: 時間複雜度高:O(n^3)

優點:不需要考慮量綱的問題

2. 多元線性回歸的實作

5-7 多元線性回歸1. 多元線性回歸的正規方程解2. 多元線性回歸的實作3. sklearn中的調用4. 使用KNN解決回歸問題5. 線性回歸的可解釋性6. 線性回歸特點總結

每個系數對應一個特征,系數可以用于描述每個特征對于結果的貢獻程度

是以實作的時候是将截距和系數分開傳回給使用者

封裝成類:

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:

非參數學習

回歸分類問題都能解決

對資料沒有假設

前面都是使用多元線性回歸的正規方程解,複雜度大

後面将介紹梯度下降法