100天專案 Day3 多元線性迴歸
阿新 • • 發佈:2019-01-01
多元線性迴歸嘗試通過一個線性方程來適配觀測資料,這個線性方程是在兩個及以上的特徵和響應之間構建的一個關係。
多元線性迴歸的實現步驟和簡單線性迴歸很相似,在評價部分有所不同。
可以用來找出預測結果上哪個特徵影響力最大,以及變數之間是如何互相關聯的。
迴歸分析的假設前提:
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-')
可以看到結果並不似很好,初步認為是和變數是否有剔除有關