機器學習第三天 多元線性回歸
數(shù)據(jù)集下載地址
https://www.xiehaoo.com/media/record/pinke/2018/08/50_Startups.csv
多元線性回歸嘗試通過用一個線性方程來適配觀測數(shù)據(jù),這個線性方程是在兩個以上(包括兩個)的特性和響應之間構(gòu)建的一個關(guān)系。多元線性回歸的實現(xiàn)步驟和簡單線性回歸很相似吉捶,在評價部分有所不同。你可以用它來找出在預測結(jié)果上哪個因素影響力最大憋槐,以及不同變量是如何相互關(guān)聯(lián)的。
設(shè)想
想要有一個成功的回歸分析淑趾,確認這些假定很重要阳仔。
1、線性:自變量和因變量的關(guān)系應該是線性的(即特征值和預測值是線性相關(guān)的)
2、保持誤差項的方差齊性(常數(shù)方差):誤差項的分散(方差)必須等同
3近范、多元正態(tài)分布:多元回歸假定殘差符合正態(tài)分布嘶摊。
4昂羡、缺少多重共線性:假設(shè)數(shù)據(jù)有極少甚至沒有多重共線性箱叁。當特征(或自變量)不是相互獨立時击儡、會引發(fā)多重共線性枝誊。
虛(擬)變量
在多元回歸模型中、當遇到數(shù)據(jù)集是非數(shù)值數(shù)據(jù)類型時针史,使用分類數(shù)據(jù)是一個非常有效的方法罗丰。
分類數(shù)據(jù)聪黎、是指反映(事物)類別的數(shù)據(jù)蔗喂,是離散數(shù)據(jù)忘渔,其數(shù)值個數(shù)(分類屬性)有限(但可能很多)且值之間無序。
比如缰儿,按性別分為男畦粮、女兩類。在一個回歸模型中乖阵,這些分類值可以用虛變量來表示宣赔,變量通常取諸如1或0這樣的值,來表示肯定類型或否定類型瞪浸。
虛擬變量陷阱
虛擬變量是指兩個以上(包括兩個)變量之間高度相關(guān)的情形儒将。簡而言之,就是存在一個能夠被其他變量預測出的變量默终。我們舉一個存在重復類別(變量)的直觀例子:假使我們舍棄男性類別椅棺,那么,該類別也可以通過女性類別來定義(女性值為0時齐蔽,表示男性、為1市表示女性)床估,反之亦然含滴。
解決虛擬變量陷阱的方法是,類別變量減去一:假如有m個類別丐巫,那么在模型構(gòu)建時取m-1個虛擬變量谈况,減去的那個變量可以看作是參照值。
注意
過多的變量可能會降低模型的精確度递胧,尤其是如果存在一些對結(jié)果無關(guān)的變量碑韵,或者存在對其他變量造成很大影響的變量時。這里介紹一些選擇合適變量的方法:
1缎脾、向前選擇法
2祝闻、向后選擇法(也稱 向后剔除法/向后消元法)
3、向前向后法:即結(jié)合了上面說的向前法和向后法遗菠,先用向前法篩選一遍联喘,再用向后法篩選一遍华蜒,直到最后無論怎么篩選模型變量都不再發(fā)生變化,就算是結(jié)束了
第一步:數(shù)據(jù)預處理
1.導入相關(guān)庫 Pandas豁遭、Numpy叭喜、Sklearn 、Matplotlib
2.導入csv數(shù)據(jù)集
3.檢查缺失數(shù)據(jù)
4.劃分數(shù)據(jù)集
5.有必要的話蓖谢,編輯虛擬變量并注意避免虛擬變量陷阱
6.特征縮放用簡單線性回歸模型的相關(guān)庫實現(xiàn)
數(shù)據(jù)預處理通過前兩天的學習已經(jīng)熟悉了需要哪些步驟捂蕴,就不單獨一列一列分析了
import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.cross_validation import train_test_split
from sklearn.linear_model import LinearRegression
dataset = pd.read_csv('/Users/xiehao/Desktop/100-Days-Of-ML-Code-master/datasets/50_Startups.csv')
"""
數(shù)據(jù)表格
R&D Spend Administration Marketing Spend State Profit
165349.2 136897.8 471784.1 New York 192261.83
162597.7 151377.59 443898.53 California 191792.06
153441.51 101145.55 407934.54 Florida 191050.39
144372.41 118671.85 383199.62 New York 182901.99
142107.34 91391.77 366168.42 Florida 166187.94
131876.9 99814.71 362861.36 New York 156991.12
134615.46 147198.87 127716.82 California 156122.51
130298.13 145530.06 323876.68 Florida 155752.6
120542.52 148718.95 311613.29 New York 152211.77
123334.88 108679.17 304981.62 California 149759.96
101913.08 110594.11 229160.95 Florida 146121.95
100671.96 91790.61 249744.55 California 144259.4
93863.75 127320.38 249839.44 Florida 141585.52
91992.39 135495.07 252664.93 California 134307.35
119943.24 156547.42 256512.92 Florida 132602.65
114523.61 122616.84 261776.23 New York 129917.04
78013.11 121597.55 264346.06 California 126992.93
94657.16 145077.58 282574.31 New York 125370.37
91749.16 114175.79 294919.57 Florida 124266.9
86419.7 153514.11 0 New York 122776.86
76253.86 113867.3 298664.47 California 118474.03
78389.47 153773.43 299737.29 New York 111313.02
73994.56 122782.75 303319.26 Florida 110352.25
67532.53 105751.03 304768.73 Florida 108733.99
77044.01 99281.34 140574.81 New York 108552.04
64664.71 139553.16 137962.62 California 107404.34
75328.87 144135.98 134050.07 Florida 105733.54
72107.6 127864.55 353183.81 New York 105008.31
66051.52 182645.56 118148.2 Florida 103282.38
65605.48 153032.06 107138.38 New York 101004.64
61994.48 115641.28 91131.24 Florida 99937.59
61136.38 152701.92 88218.23 New York 97483.56
63408.86 129219.61 46085.25 California 97427.84
55493.95 103057.49 214634.81 Florida 96778.92
46426.07 157693.92 210797.67 California 96712.8
46014.02 85047.44 205517.64 New York 96479.51
28663.76 127056.21 201126.82 Florida 90708.19
44069.95 51283.14 197029.42 California 89949.14
20229.59 65947.93 185265.1 New York 81229.06
38558.51 82982.09 174999.3 California 81005.76
28754.33 118546.05 172795.67 California 78239.91
27892.92 84710.77 164470.71 Florida 77798.83
23640.93 96189.63 148001.11 California 71498.49
15505.73 127382.3 35534.17 New York 69758.98
22177.74 154806.14 28334.72 California 65200.33
1000.23 124153.04 1903.93 New York 64926.08
1315.46 115816.21 297114.46 Florida 49490.75
0 135426.92 0 California 42559.73
542.05 51743.15 0 New York 35673.41
0 116983.8 45173.06 California 14681.4
"""
X = dataset.iloc[:, :-1].values
Y = dataset.iloc[:, 4].values
labelencoder = LabelEncoder()
X[:, 3] = labelencoder.fit_transform(X[:, 3])
onehotencoder = OneHotEncoder(categorical_features=[3])
X = onehotencoder.fit_transform(X).toarray()
X = X[:, 1:]
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0)
第二步:在訓練集上訓練模型
這一步和簡單線性回歸模型處理方式完全一樣。
用sklearn.linear_model庫的LinearRegression類闪幽,在數(shù)據(jù)集上訓練模型啥辨。首先,創(chuàng)建一個LinearRegression的對象regressor,接著用LinearRegression類的fit()方法沟使,用對象regressor在數(shù)據(jù)集上進行訓練委可。
regressor = LinearRegression()
regressor.fit(X_train, Y_train)
第三步:預測結(jié)果
在測試集上進行預測,并觀察結(jié)果腊嗡。我們將把輸出結(jié)果保存在向量Y_pred中着倾。在上一步regressor對象使用predict()方法來預測結(jié)果
y_pred = regressor.predict(X_test)
>>print(y_pred)
[ 103015.20159797 132582.27760815 132447.73845175 71976.09851258
178537.48221054 116161.24230165 67851.69209676 98791.73374688
113969.43533012 167921.0656955 ]
感謝原作者 Avik-Jain 以及 zhyongquan的漢化