教你學Python32-預測數值型數據:數據回歸

2020-12-14 程式設計師架構師13

一、引言

前面的文章介紹了很多分類算法,分類的目標變量是標稱型數據,而本節將會對連續型的數據做出預測。主要講解簡單的線性回歸和局部加權線性回歸。

二、什麼是回歸?

回歸的目的是預測數值型的目標值。他和我們之前做的分類是不一樣的。最直接的辦法是依據輸入寫出一個目標值的計算公式。假如你想預測小姐姐男友法拉利汽車的功率,可能會這麼計算:

HorsePower = 0.0015 * annualSalary - 0.99 * hoursListeningToPublicRadio

寫成中文就是:

小姐姐男友法拉利汽車的功率 = 0.0015 * 小姐姐男友年薪 - 0.99 * 收聽公共廣播的時間

這就是所謂的回歸方程(regression equation),其中的0.0015和-0.99稱為回歸係數(regression weights),求這些回歸係數的過程就是回歸。一旦有了這些回歸係數,再給定輸入,做預測就非常容易了。具體的做法是用回歸係數乘以輸入值,再將結果全部加在一起,就得到了預測值。

說到回歸,一般都是指線性回歸(linear regression),所以本文裡的回歸和線性回歸代表同一個意思。線性回歸意味著可以將輸入項分別乘以一些常量,再將結果加起來得到輸出。需要說明的是,存在另一種成為非線性回歸的回歸模型,該模型不認同上面的做法,比如認為輸出可能是輸入的乘積。這樣,上面的功率計算公式也可以寫做:

HorsePower = 0.0015 * annualSalary / hoursListeningToPublicRadio

這就是一個非線性回歸的例子,這裡對此不做深入討論。

三、揭開回歸神奇的面紗~

1、用線性回歸找到最佳擬合直線

應該怎麼從一大堆數據裡求出回歸方程呢?假定輸入數據存放在矩陣X中,結果存放在向量y中:

而回歸係數存放在向量w中:

那麼對於給定的數據x1,即矩陣X的第一列數據,預測結果u1將會通過如下公式給出:

現在的問題是,手裡有數據矩陣X和對應的標籤向量y,怎麼才能找到w呢?一個常用的方法就是找出使誤差最小的w。這裡的誤差是指預測u值和真實y值之間的差值,使用該誤差的簡單累加將使得正差值和負差值相互抵消,所以我們採用平方誤差。

平方誤差和可以寫做:

用矩陣表示還可以寫做:

為啥能這麼變化,記住一個前提:若x為向量,則默認x為列向量,x^T為行向量。將上述提到的數據矩陣X和標籤向量y帶進去,就知道為何這麼變化了。

在繼續推導之前,我們要先明確一個目的:找到w,使平方誤差和最小。因為我們認為平方誤差和越小,說明線性回歸擬合效果越好。

現在,我們用矩陣表示的平方誤差和對w進行求導:

如果對於矩陣求不熟悉的,可以移步這裡:點擊查看

令上述公式等於0,得到:

w上方的小標記表示,這是當前可以估計出的w的最優解。從現有數據上估計出的w可能並不是數據中的真實w值,所以這裡使用了一個"帽"符號來表示它僅是w的一個最佳估計。

值得注意的是,上述公式中包含逆矩陣,也就是說,這個方程只在逆矩陣存在的時候使用,也即是這個矩陣是一個方陣,並且其行列式不為0。

述的最佳w求解是統計學中的常見問題,除了矩陣方法外還有很多其他方法可以解決。通過調用NumPy庫裡的矩陣方法,我們可以僅使用幾行代碼就完成所需功能。該方法也稱作OLS, 意思是「普通小二乘法」(ordinary least squares)。

數據格式為:

數據下載地址:數據集下載

第一列都為1.0,即x0。第二列為x1,即x軸數據。第三列為x2,即y軸數據。首先繪製下數據,看下數據分布。創建regression.py文件,編寫代碼如下:

運行代碼如下:

通過可視化數據,我們可以看到數據的分布情況。接下來,讓我們根據上文中推導的回歸係數計算方法,求出回歸係數向量,並根據回歸係數向量繪製回歸曲線,編寫代碼如下:

運行代碼如下:

如何判斷擬合曲線的擬合效果的如何呢?當然,我們可以根據自己的經驗進行觀察,除此之外,我們還可以使用corrcoef方法,來比較預測值和真實值的相關性。編寫代碼如下:

運行結果如下:

可以看到,對角線上的數據是1.0,因為yMat和自己的匹配是完美的,而YHat和yMat的相關係數為0.98。

最佳擬合直線方法將數據視為直線進行建模,具有十分不錯的表現。數據當中似乎還存在其他的潛在模式。那麼如何才能利用這些模式呢?我們可以根據數據來局部調整預測,下面就會介紹這種方法。

2、局部加權線性回歸

線性回歸的一個問題是有可能出現欠擬合現象,因為它求的是具有小均方誤差的無偏估計。而易見,如果模型欠擬合將不能取得好的預測效果。所以有些方法允許在估計中引入一 些偏差,從而降低預測的均方誤差。

其中的一個方法是局部加權線性回歸(Locally Weighted Linear Regression,LWLR)。在該方法中,我們給待預測點附近的每個點賦予一定的權重。與kNN一樣,這種算法每次預測均需要事先選取出對應的數據子集。該算法解除回歸係數W的形式如下:

其中W是一個矩陣,這個公式跟我們上面推導的公式的區別就在於W,它用來給每個點賦予權重。

LWLR使用"核"(與支持向量機中的核類似)來對附近的點賦予更高的權重。核的類型可以自由選擇,最常用的核就是高斯核,高斯核對應的權重如下:

這樣我們就可以根據上述公式,編寫局部加權線性回歸,我們通過改變k的值,可以調節回歸效果,編寫代碼如下:

運行結果如下:

可以看到,當k越小,擬合效果越好。但是當k過小,會出現過擬合的情況,例如k等於0.003的時候。

喜歡點下關注,你的關注是我寫作的最大支持

相關焦點

  • Python數據實戰之數據探索與模型預測
    一般來講,在這個階段,除了細緻研究用數據可視化方法得到的圖表外,可能還包括以下一種或多種活動:1.總結數據;2.為數據分組;3.探索不同屬性之間的關係;4.識別模式和趨勢;5.建立回歸模型;6.建立分類模型。通常來講,數據分析需要總結與研究數據相關的各種表述。總結過程,在不損失重要信息的情況下,將數據濃縮為對系統的解釋。
  • 從零開始學Python數據分析【21】--線性回歸(實戰部分)
    Python數據分析【1】--數據類型及結構從零開始學Python數據分析【2】-- 數值計算及正則表達式從零開始學Python數據分析【3】-- 控制流與自定義函數從零開始學Python數據分析【4】-- numpy從零開始學Python數據分析【5】-- pandas(序列部分)從零開始學Python數據分析【6】-- pandas
  • Python數據分析—apply函數
    在對海量數據進行分析的過程中,我們可能要把文本型的數據處理成數值型的數據,方便放到模型中進行使用。
  • python數據分析專題 (7):python數據分析模塊
    也就是這些python的擴展包讓python可以做數據分析,主要包括numpy,scipy,pandas,matplotlib,scikit-learn等等諸多強大的模塊,在結合上ipython交互工具 ,以及python強大的爬蟲數據獲取能力,字符串處理能力,讓python成為完整的數據分析工具。
  • python金融風控評分卡模型和數據分析
    這套微專業課程是網際網路上最全,最專業的python信貸建模教程。針對銀行,消費金融的現金貸等線上貸款場景,金融信貸領域建模型和數據分析很難?邏輯回歸評分卡/catboost/xgboost/lightgbm/等模型用python一次全部搞定!由易到難,帶你從菜鳥輕鬆晉級kaggle級建模高手。
  • Python數據分析|線性回歸
    Python數據分析學習筆記,今天分享下利用Python對業務進行數據預處理,並利用線性回歸進行數據預測。④先以我們後續需要用來做線性回歸的列「內容閱讀量」為標準,將不含該值的數據行去除:調用dropna函數,並執行info函數看數據情況。
  • 大數據分析python自回歸模型
    那是因為我們在此類數據中遇到自相關。換句話說,通過了解當今產品的價格,我們經常可以對明天的產品價值做出大致的預測。因此,在大數據分析python自回歸模型中,我們將討論一個反映這種相關性的模型。–自回歸模型。
  • Python機器學習從原理到實踐(2):數據擬合與廣義線性回歸
    簡單的說回歸就是預測數值,而分類是給數據打上標籤歸類。本文講述如何用Python進行基本的數據擬合,以及如何對擬合結果的誤差進行分析。本例中使用一個2次函數加上隨機的擾動來生成500個點,然後嘗試用1、2、100次方的多項式對該數據進行擬合。
  • Python兩種基本數據類型:數值及字符串;python交互式運行環境
    裡面用到很多python編程的知識點。筆者覺得有必要解釋一下。編程需要大量數據,為了編程方便,數據就分成了不同的類型,不同的數據類型有不同的特性。Python兩種基本數據類型python語言中,有兩種最基本的數據類型:數值類型及字符串類型。
  • Python數據分析|泰坦尼克邏輯回歸
    Python數據分析學習筆記,今天分享下利用Python進行邏輯回歸,預測鐵達尼號乘客生存情況。\Users\\Administrator\\Desktop\\test.csv")print('訓練數據集:',train.shape,'測試數據集:',test.shape)結果:表示訓練數據集為891行,12列;測試數據集為418行,11列,測試集少了一列Survived即我們後續需要通過邏輯回歸進行預測的。
  • 從零開始學Python數據分析【25】--嶺回歸及LASSO回歸(實戰部分)
    作者:劉順祥個人微信公眾號:每天進步一點點2015前文傳送門:從零開始學Python數據分析
  • 手把手教你用Python庫Keras做預測(附代碼)
    本文將教你如何使用Keras這個Python庫完成深度學習模型的分類與回歸預測。當你在Keras中選擇好最合適的深度學習模型,就可以用它在新的數據實例上做預測了。但是很多初學者不知道該怎樣做好這一點,我經常能看到下面這樣的問題: 「我應該如何用Keras對我的模型作出預測?」
  • 量化交易之《Python數據分析》
    Numpy:提供數值數組和函數Scipy:科學計算庫Matplotlib:數據可視化 Numpy 數組的優勢1 Numpy數組能夠運用向量化運算來處理整個數組,而完成同樣的任務,python的列表則通常必須藉助循環語句遍歷列表,並對逐個元素進行相應的處理2 Numpy使用了優化過的C
  • 小白學數據:教你用Python實現簡單監督學習算法
    根據給定的數據集,機器學習可以分為兩大類:分類(Classification)和回歸(Regression)。如果給定的數據集的輸出值是類別,那麼待解決是分類問題。如果給定的數據集的輸出值是連續的,那麼該問題是回歸問題。
  • python機器學習預測分析核心算法.pdf
    本書為不具備數學或統計背景的讀者量身打造,詳細介紹了如何:  ● 針對任務選擇合適算法;● 對不同目的應用訓練好的模型;  ● 學習數據處理機制,準備數據;● 評估模型性能以保證應用效果;  ● 掌握Python 機器學習核心算法包;● 使用示例代碼設計和構建你自己的模型;  ● 構建實用的多功能預測模型。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    本課程為python教程大合集,包含python所有就業方向,每套課程均來自市面上主流培訓機構的原版教程,價值都在數百元以上 每套課程均包含:視頻課程+課件+原始碼 重要:建議根據自己工作方向和需求,重點選擇2到3套課程學精,吃透,然後在工作 重要:零基礎小白建議先選擇零基礎全能篇的一套課程學精
  • 數據科學探索(python 與 R 的比較)
    目 錄1  數據科學探索(python 與 R 的比較)1.1  數據讀取1.1.1  Python1.1.2  R1.2  數據描述1.2.1  python1.2.2  R1.3  數據處理1.3.1  python1.3.2  R
  • Python數據類型串講(上)
    3、數據類型串講python的數據類型根據其結構劃分為兩類:原子類型和結構類型。原子類型是python中最簡單的一種數據類型,或者說是python中最原始的數據類型,僅包含一種值的集合:數字型或字符串型;結構類型則是包含多種值,結構較複雜的集合。
  • python數據分析:numpy入門
    微信公眾號:學點啥玩點啥小白友好型python數據分析:numpy入門numpy:一個在python中做科學計算的基礎庫,重在數值計算,也是大部分python科學計算庫的基礎庫,多用於在大型、多維數組上執行數值計算。
  • python數據分析師面試題選
    例舉幾個常用的python分析數據包及其作用數據處理和分析:NumPy, SciPy, Pandas機器學習:SciKit可視化: Matplotlib, Seaborn3.Pandas中使用的標準數據缺失標誌是什麼NaN7. 描述numpy array比python list的優勢a. numpy array比python list更緊湊,存儲數據佔的空間小,讀寫速度快。