Python 機器學習:多元線性回歸

2021-03-02 機器學習AI算法工程


向AI轉型的程式設計師都關注了這個號👇👇👇

大數據挖掘DT機器學習  公眾號: datayx

接著上一次的一元線性回歸

python機器學習:線性回歸

往下講,這篇文章要講解的多元線性回歸。

1、什麼是多元線性回歸模型?

當y值的影響因素不唯一時,採用多元線性回歸模型。例如商品的銷售額可能不電視廣告投入,收音機廣告投入,報紙廣告投入有關係,可以有 sales =β0+β1*TV+β2* radio+β3*newspaper.

2、使用pandas來讀取數據

pandas 是一個用於數據探索、數據分析和數據處理的python庫

import pandas as pd  

# read csv file directly from a URL and save the results    

data = pd.read_csv('/home/lulei/Advertising.csv')  

# display the first 5 rows  

data.head()  


這裡的Advertising.csv是來自http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv。大家可以自己下載。

上面代碼的運行結果:

TV Radio Newspaper Sales0 230.1 37.8 69.2 22.11 44.5 39.3 45.1 10.42 17.2 45.9 69.3 9.33 151.5 41.3 58.5 18.54 180.8 10.8 58.4 12.9

上面顯示的結果類似一個電子表格,這個結構稱為Pandas的數據幀(data frame),類型全稱:pandas.core.frame.DataFrame.

pandas的兩個主要數據結構:Series和DataFrame:

  

data.tail()  

只顯示結果的末尾5行

       TV  Radio  Newspaper  Sales195   38.2    3.7       13.8    7.6196   94.2    4.9        8.1    9.7197  177.0    9.3        6.4   12.8198  283.6   42.0       66.2   25.5199  232.1    8.6        8.7   13.4


# check the shape of the DataFrame(rows, colums)  

data.shape  

查看DataFrame的形狀,注意第一列的叫索引,和資料庫某個表中的第一列類似。

(200,4) 

3、分析數據

特徵:

響應:

在這個案例中,我們通過不同的廣告投入,預測產品銷量。因為響應變量是一個連續的值,所以這個問題是一個回歸問題。數據集一共有200個觀測值,每一組觀測對應一個市場的情況。

注意:這裡推薦使用的是seaborn包。網上說這個包的數據可視化效果比較好看。其實seaborn也應該屬於matplotlib的內部包。只是需要再次的單獨安裝。

import seaborn as sns  

import matplotlib.pyplot as plt   

  

sns.pairplot(data, x_vars=['TV','Radio','Newspaper'], y_vars='Sales', size=7, aspect=0.8)  

plt.show()  

這裡選擇TV、Radio、Newspaper 作為特徵,Sales作為觀測值  

seaborn的pairplot函數繪製X的每一維度和對應Y的散點圖。通過設置size和aspect參數來調節顯示的大小和比例。可以從圖中看出,TV特徵和銷量是有比較強的線性關係的,而Radio和Sales線性關係弱一些,Newspaper和Sales線性關係更弱。通過加入一個參數kind='reg',seaborn可以添加一條最佳擬合直線和95%的置信帶。

sns.pairplot(data, x_vars=['TV','Radio','Newspaper'], y_vars='Sales', size=7, aspect=0.8, kind='reg')  

plt.show()  


結果顯示如下:


4、線性回歸模型

優點:快速;沒有調節參數;可輕易解釋;可理解。缺點:相比其他複雜一些的模型,其預測準確率不是太高,因為它假設特徵和響應之間存在確定的線性關係,這種假設對於非線性的關係,線性回歸模型顯然不能很好的對這種數據建模。

線性模型表達式:  其中

在這個案例中: 

(1)、使用pandas來構建X(特徵向量)和y(標籤列)

scikit-learn要求X是一個特徵矩陣,y是一個NumPy向量。

pandas構建在NumPy之上。

因此,X可以是pandas的DataFrame,y可以是pandas的Series,scikit-learn可以理解這種結構。

  

feature_cols = ['TV', 'Radio', 'Newspaper']  

  

X = data[feature_cols]  

  

X = data[['TV', 'Radio', 'Newspaper']]  

  

print X.head()  

  

print type(X)  

print X.shape  

輸出結果如下:

     TV  Radio  Newspaper0  230.1   37.8       69.21   44.5   39.3       45.12   17.2   45.9       69.33  151.5   41.3       58.54  180.8   10.8       58.4(200, 3)


  

y = data['Sales']  

  

y = data.Sales  

  

print y.head()  

輸出的結果如下:

0    22.11    10.42     9.33    18.54    12.9Name: Sales

(2)、構建訓練集與測試集

##構造訓練集和測試集  

from sklearn.cross_validation import train_test_split  #這裡是引用了交叉驗證  

X_train,X_test, y_train, y_test = train_test_split(X, y, random_state=1)  



#default split is 75% for training and 25% for testing

[html] view plain copy

print X_train.shape  

print y_train.shape  

print X_test.shape  

print y_test.shape  

輸出結果如下:

(150, 3)(150,)(50, 3)(50,)

(3)sklearn的線性回歸

from sklearn.linear_model import LinearRegression  

linreg = LinearRegression()  

model=linreg.fit(X_train, y_train)  

print model  

print linreg.intercept_  

print linreg.coef_  


輸出的結果如下:

LinearRegression(copy_X=True, fit_intercept=True, normalize=False)2.66816623043[ 0.04641001  0.19272538 -0.00349015]

# pair the feature names with the coefficients  

zip(feature_cols, linreg.coef_)  

輸出如下:

[('TV', 0.046410010869663267), ('Radio', 0.19272538367491721), ('Newspaper', -0.0034901506098328305)]

y=2.668+0.0464∗TV+0.192∗Radio-0.00349∗Newspaper

如何解釋各個特徵對應的係數的意義?

對於給定了Radio和Newspaper的廣告投入,如果在TV廣告上每多投入1個單位,對應銷量將增加0.0466個單位。就是加入其它兩個媒體投入固定,在TV廣告上每增加1000美元(因為單位是1000美元),銷量將增加46.6(因為單位是1000)。但是大家注意這裡的newspaper的係數居然是負數,所以我們可以考慮不使用newspaper這個特徵。這是後話,後面會提到的。

(4)、預測

y_pred = linreg.predict(X_test)  

print y_pred  

print type(y_pred)  


輸出結果如下:

[ 14.58678373   7.92397999  16.9497993   19.35791038   7.36360284   7.35359269  16.08342325   9.16533046  20.35507374  12.63160058  22.83356472   9.66291461   4.18055603  13.70368584  11.4533557   4.16940565  10.31271413  23.06786868  17.80464565  14.53070132  15.19656684  14.22969609   7.54691167  13.47210324  15.00625898  19.28532444  20.7319878   19.70408833  18.21640853   8.50112687   9.8493781    9.51425763   9.73270043  18.13782015  15.41731544   5.07416787  12.20575251  14.05507493  10.6699926    7.16006245  11.80728836  24.79748121  10.40809168  24.05228404  18.44737314  20.80572631   9.45424805  17.00481708   5.78634105   5.10594849]


5、回歸問題的評價測度

(1) 評價測度

對於分類問題,評價測度是準確率,但這種方法不適用於回歸問題。我們使用針對連續數值的評價測度(evaluation metrics)。
這裡介紹3種常用的針對線性回歸的測度。

1)平均絕對誤差(Mean Absolute Error, MAE)

(2)均方誤差(Mean Squared Error, MSE)

(3)均方根誤差(Root Mean Squared Error, RMSE)

這裡我使用RMES。

  

print type(y_pred),type(y_test)  

print len(y_pred),len(y_test)  

print y_pred.shape,y_test.shape  

from sklearn import metrics  

import numpy as np  

sum_mean=0  

for i in range(len(y_pred)):  

    sum_mean+=(y_pred[i]-y_test.values[i])**2  

sum_erro=np.sqrt(sum_mean/50)  

  

print "RMSE by hand:",sum_erro  

最後的結果如下:

50 50(50,) (50,)RMSE by hand: 1.42998147691

(2)做ROC曲線

import matplotlib.pyplot as plt  

plt.figure()  

plt.plot(range(len(y_pred)),y_pred,'b',label="predict")  

plt.plot(range(len(y_pred)),y_test,'r',label="test")  

plt.legend(loc="upper right")   

plt.xlabel("the number of sales")  

plt.ylabel('value of sales')  

plt.show()  


顯示結果如下:(紅色的線是真實的值曲線,藍色的是預測值曲線)


直到這裡整個的一次多元線性回歸的預測就結束了。

6、改進特徵的選擇
在之前展示的數據中,我們看到Newspaper和銷量之間的線性關係竟是負關係(不用驚訝,這是隨機特徵抽樣的結果。換一批抽樣的數據就可能為正了),現在我們移除這個特徵,看看線性回歸預測的結果的RMSE如何?

依然使用我上面的代碼,但只需修改下面代碼中的一句即可:

  

feature_cols = ['TV', 'Radio', 'Newspaper']  

  

X = data[feature_cols]  

  

  

# print the first 5 rowsprint X.head()# check the type and shape of Xprint type(X)print X.shape

最後的到的係數與測度如下:

LinearRegression(copy_X=True, fit_intercept=True, normalize=False)

2.81843904823[ 0.04588771  0.18721008]RMSE by hand: 1.28208957507

然後再次使用ROC曲線來觀測曲線的整體情況。我們在將Newspaper這個特徵移除之後,得到RMSE變小了,說明Newspaper特徵可能不適合作為預測銷量的特徵,於是,我們得到了新的模型。我們還可以通過不同的特徵組合得到新的模型,看看最終的誤差是如何的。

備註:

之前我提到了這種錯誤:

註:上面的結果是由train_test_spilit()得到的,但是我不知道為什麼我的版本的sklearn包中居然報錯:

ImportError   for testingImportError: cannot import name train_test_split

處理方法:1、我後來重新安裝sklearn包。再一次調用時就沒有錯誤了。

                  2、自己寫函數來認為的隨機構造訓練集和測試集。(這個代碼我會在最後附上。)

這裡我給出我自己寫的函數:

運算結果如下:

LinearRegression(copy_X=True, fit_intercept=True, normalize=False)3.1066750253
[ 0.04588016 0.18078772 -0.00187699]
RMSE by hand: 1.39068687332

https://blog.csdn.net/LULEI1217/article/details/49386295

搜索公眾號添加: datayx  


不斷更新資源

深度學習、機器學習、數據分析、python

長按圖片,識別二維碼,點關注

相關焦點

  • python機器學習--線性回歸
    python機器學習--線性回歸線性回歸是最簡單的機器學習模型,其形式簡單,易於實現,同時也是很多機器學習模型的基礎。對於一個給定的訓練集數據,線性回歸的目的就是找到一個與這些數據最吻合的線性函數。針對線性回歸算法在之前的數模案例也有涉及喔,歡迎去看看上一篇博客數學建模預測模型實例--大學生體測數據模型在這裡插入圖片描述OLS線性回歸Ordinary Least Squares 最小二乘法一般情況下,線性回歸假設模型為下,其中w為模型參數
  • python線性回歸
    一.理論基礎1.回歸公式  對於單元的線性回歸,我們有:f(x) = kx + b 的方程(k代表權重,b代表截距)。
  • Python 實戰多元線性回歸模型,附帶原理+代碼
    來源 | 早起Python( ID:zaoqi-python )「多元線性回歸模型」非常常見,是大多數人入門機器學習的第一個案例,儘管如此,裡面還是有許多值得學習和注意的地方。其中多元共線性這個問題將貫穿所有的機器學習模型,所以本文會「將原理知識穿插於代碼段中」,爭取以不一樣的視角來敘述和講解「如何更好的構建和優化多元線性回歸模型」。主要將分為兩個部分:
  • Python機器學習算法入門之梯度下降法實現線性回歸
    線性回歸的目標很簡單,就是用一條線,來擬合這些點,並且使得點集與擬合函數間的誤差最小。如果這個函數曲線是一條直線,那就被稱為線性回歸,如果曲線是一條二次曲線,就被稱為二次回歸。數據來自於GradientDescentExample中的data.csv文件,共100個數據點,如下圖所示:        我們的目標是用一條直線來擬合這些點。
  • 原理+代碼|Python實戰多元線性回歸模型
    文章來源: 早起Python作者:蘿蔔前言「多元線性回歸模型」非常常見,是大多數人入門機器學習的第一個案例,儘管如此,裡面還是有許多值得學習和注意的地方。其中多元共線性這個問題將貫穿所有的機器學習模型,所以本文會「將原理知識穿插於代碼段中」,爭取以不一樣的視角來敘述和講解「如何更好的構建和優化多元線性回歸模型」。
  • 入門機器學習之線性回歸
    回歸分析是研究相關關係的是一種數學工具,是用一個變量取得的值去估計另一個變量所取得的值。回歸分析按照涉及的變量的多少,分為一元回歸和多元回歸分析;按照因變量的多少,可分為簡單回歸分析和多重回歸分析;按照自變量和因變量之間的關係類型,可分為線性回歸分析和非線性回歸分析。如果在回歸分析中,只包括一個自變量和一個因變量,且二者的關係可用一條直線近似表示,這種回歸分析稱為一元線性回歸分析。
  • 用 Python 進行多元線性回歸分析(附代碼)
    很多人在做數據分析時會經常用到一元線性回歸,這是描述兩個變量間統計關係的最簡單的回歸模型。但現實問題中,我們往往會碰到多個變量間的線性關係的問題,這時就要用到多元線性回歸,多元線性回歸是一元回歸的一種推廣,其在實際應用中非常廣泛,本文就用python代碼來展示一下如何用多元線性回歸來解決實際問題。圖1.
  • 機器學習:回歸分析——多元線性回歸分析
    我們把包括兩個或兩個以上自變量的回歸稱為多元線性回歸。生活中的現象常常是與多個因素相聯繫的,由多個自變量的最優組合共同來預測或估計因變量,比只用一個自變量進行預測或估計更有效,更符合實際。所以相比一元線性回歸,多元線性回歸的實際意義更大。
  • python多重線性回歸分析
    python多重線性回歸分析多重線性回歸分析定義多重線性回歸模型:Mulitiple Linear Regression多元線性回歸模型:MultivariateLinear Regression數據準備#多重線性回歸#數據準備import pandas as pddf=pd.read_csv('e:/python/out/corr.csv',encoding='utf8')df根據預測目標,確定自變量和因變量#多重線性回歸
  • 機器學習之多元線性回歸模型梯度下降公式與代碼實現(篇二)
    上一篇我們介紹了線性回歸的概述和最小二乘的介紹,對簡單的一元線性方程模型手推了公式和python代碼的實現。機器學習之線性回歸模型詳細手推公式與代碼實現(篇一)今天這一篇來介紹多元線性回歸模型多元線性回歸模型介紹在回歸分析中,如果有兩個或兩個以上的自變量,就稱為多元回歸
  • sklearn機器學習心得—線性回歸|粉絲投稿1
    ,也是重要的算法之一,基本上第一次接觸的機器學習算法就是線性回歸了。因為相對其他算法而言,我覺得線性回歸是相對比較容易的算法,從某種意義上來說,在學習函數的時候已經開始接觸線性回歸了,只不過那個時候並沒有涉及到誤差項,其實在中學的時候就有接觸了,學習的最小二乘法就是啦~~1).對於坐標系中給定的點,我們希望用一條線或是一個類似於:f(x)=θ0+θ1*x1+θ2*x2_...θn*xn 方程來擬合這寫數據點,這就是我們說的回歸了2).這次我們要用的是
  • 跟著吳恩達老師學習機器學習,Python筆記分享!
    如果你想要聽吳恩達的機器學習課程,你是可以免費旁聽完整課程想多少次就多少次的。我們開始吧!線性回歸最簡單的機器學習算法。此算法是基於一個高中講的很基本的直線公式:">Y = AX + B沒忘吧?忘了也無所謂。這是一個很簡單的公式。這是解釋為什麼這個簡單公式可以被用來做預測的完整文章。
  • 機器學習 | 線性回歸大家族Part1
    目前,機器學習在疾病的鑑別診斷,藥物的生產研究,臨床試驗研究,放射影像學等醫學領域已有十分廣泛的應用。今天推出機器學習系列筆記第20期,本期分享內容為:機器學習之線性回歸大家族Part1。通常來說,我們認為統計學注重先驗,而機器學習看重結果,因此機器學習中不會提前為線性回歸排除共線性等可能會影響模型的因素,反而會先建立模型以查看效果。模型確立之後,如果效果不好,我們就根據統計學的指導來排除可能影響模型的因素。回歸需求在現實中非常多,所以我們自然也有各種各樣的回歸類算法。
  • 模型之母:多元線性回歸
    0x00 前言 在線性回歸的前3篇中,我們介紹了簡單線性回歸這種樣本只有一個特徵值的特殊形式,並且了解了一類機器學習的建模推導思想,即:然後通過最優化損失函數或者效用函數,獲得機器學習的模型。然後我們推導並實現了最小二乘法,然後實現了簡單線性回歸。最後還以簡單線性回歸為例,學習了線性回歸的評價指標:均方誤差MSE、均方根誤差RMSE、平均絕對MAE以及R方。
  • 機器學習套路:線性回歸
    (點擊上方藍字,快速關注我們)轉自:sharkdtuhttp://sharkdtu.com/posts/ml-linear-regression.html好文投稿, 請點擊 → 這裡了解詳情線性回歸可以說是機器學習中最簡單
  • 多元回歸:理解機器學習
    在建立預測模型的過程中,理解卡內基梅隆大學教授Tom Mitchell教授對機器學習的定義,機器學習由目標任務T、經驗數據E及性能度量P構成。通過編寫簡單回歸案例,我們現在已經了解了編寫機器學習程序的基本過程。
  • 用Python實現線性回歸,8種方法哪個最高效?
    另一方面,也是更為重要的一點,線性模型的易解釋性使得它在物理學、經濟學、商學等領域中佔據了難以取代的地位。如何用Python來實現線性回歸?由於機器學習庫scikit-learn的廣泛流行,常用的方法是從該庫中調用linear_model來擬合數據。
  • 機器學習sklearn線性回歸
    回歸算法是機器學習的一個基礎算法,簡單的就是線性回歸,還有非線性回歸。本節我們講解簡單的線性回歸。
  • 用Python的Scikit-Learn庫實現線性回歸
    在本文中,我們將簡要研究線性回歸是什麼,以及如何使用Scikit-Learn(最流行的Python機器學習庫之一)在兩個變量和多個變量的情況下實現線性回歸。線性回歸可以根據給定的自變量(x)預測因變量值(y),而這種回歸技術可以確定x(輸入)和y(輸出)之間的線性關係,因此稱之為線性回歸。如果在x軸上繪製自變量(x),又在y軸上繪製因變量(y),線性回歸給出了一條最符合數據點的直線,如下圖所示。得出線性方程大概是:
  • 8種用Python實現線性回歸的方法
    另一方面,也是更為重要的一點,線性模型的易解釋性使得它在物理學、經濟學、商學等領域中佔據了難以取代的地位。那麼,如何用Python來實現線性回歸呢?由於機器學習庫scikit-learn的廣泛流行,常用的方法是從該庫中調用linear_model來擬合數據。