1. 程式人生 > >100天專案 Day3 多元線性迴歸

100天專案 Day3 多元線性迴歸

      多元線性迴歸嘗試通過一個線性方程來適配觀測資料,這個線性方程是在兩個及以上的特徵和響應之間構建的一個關係。

      多元線性迴歸的實現步驟和簡單線性迴歸很相似,在評價部分有所不同。

      可以用來找出預測結果上哪個特徵影響力最大,以及變數之間是如何互相關聯的。

迴歸分析的假設前提:

1. 特徵值和預測值應該是線性相關的

2. 保持誤差項的方差齊性: 即誤差項的分散(方差)必須等同

3. 多元正態分佈: 假定殘差符合正態分佈

4. 缺少多重共線性: 假設資料有極少甚至沒有多重共線性。當特徵不是相互獨立時,會引發多重共線性

注意:

       過多的變數可能會降低模型的精確度,尤其是如果存在一些對結果無關的變數,或者存在對其他變數造成很大影響的變數時。

可以通過一些方法選擇合適的變數:

1. 向前選擇法(逐次加使RSS【殘差平方和】最小的自變數)    

2. 向後選擇法 (逐次扔掉p值【一種在原假設為真的前提下出現觀察樣本以及更極端情況的概率】最大的變數) 

3. 向前向後法: 結合向前選擇和向後選擇法,先使用向前或向後,再使用另外一種方法篩選一遍,直至最後無論怎麼篩選模型變數都不再發生變化

虛擬變數陷阱:

       虛擬變數是指兩個及以上變數之間高度相關的情形。簡而言之,就是存在一個能夠被其他變數預測出的變數。

       eg:  一個特徵值為男,女。不加判斷定義虛擬變數時會存在連個虛擬變數。但實際情況是可以用是否是女性來定義男性。

       可以通過類別變數-1 來剔除重複。假設一個特徵值有m 個類別,可以定義m-1個虛擬變數,減掉的可作為參照值

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = pd.read_csv(r'd:\Users\lulib\Desktop\data.txt',sep='\t')
X = data.iloc[:,:-1].values
Y = data.iloc[:,-1].values
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder = LabelEncoder()
X[: , -1] = labelencoder.fit_transform(X[ : , -1])
onehotencoder = OneHotEncoder(categorical_features = [3]) ## 設定需要虛擬轉換的維度索引
X = X[: , 1:]   ## 剔除虛擬維度陷阱
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split( X,Y,test_size = 0.2, random_state = 0)
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor = regressor.fit(X_train,Y_train)
Y_pred = regressor.predict(X_test)
plt.plot(range(len(Y_pred)),Y_pred,'r-',range(len(Y_test)),Y_test,'b-')

可以看到結果並不似很好,初步認為是和變數是否有剔除有關