1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        怎么樣預(yù)測企業(yè)利潤?詳解多元線性回歸!

        共 3226字,需瀏覽 7分鐘

         ·

        2020-12-29 10:56

        往期推薦

        機器學(xué)習(xí)100天學(xué)習(xí)計劃 — 第1天 數(shù)據(jù)預(yù)處理

        機器學(xué)習(xí)100天學(xué)習(xí)計劃 — 第2天 線性回歸

        本文是機器學(xué)習(xí)100天學(xué)習(xí)計劃的第三天,詳細(xì)介紹了多元線性回歸的原理和注意事項,并以預(yù)測企業(yè)利潤為例進(jìn)行實戰(zhàn)演練。希望各位讀者能耐心讀下去。

        何為多元線性回歸?對比于前一天學(xué)習(xí)的線性回歸,多元線性回歸的特點是什么?


        多元線性回歸與簡單線性回歸一樣,都是嘗試通過使用一個方程式來適配數(shù)據(jù),得出相應(yīng)結(jié)果。不同的是,多元線性回歸方程,適配的是兩個及以上的特征(即X1、X2、...),而簡單線性回歸一般只有一個特征(X)。


        另外,與簡單線性回歸相比,多元線性回歸有一個顯著的特點,即能拿到每個特征的權(quán)重,這樣你能知道哪些因素對結(jié)果的影響最大。


        多元線性回歸特點和流程如下圖所示:



        請注意多元線性回歸的以下4個前提:


        1.線性:自變量和因變量的關(guān)系應(yīng)該大致呈線性的。
        2.呈現(xiàn)多元正態(tài)分布。
        3.保持誤差項的方差齊性(誤差項方差必須等同)。
        4.缺少多重共線性。


        第一、二點比較好理解,第三、四點需要詳細(xì)地講一下:


        第三點,保持誤差項的方差齊性的意義: 首先,明確什么叫誤差項?誤差項也可以叫隨機誤差項,一般包括:


        1)模型中省略的對被解釋變量(Y)不重要的影響因素 (解釋變量(X));
        2)解釋變量(X)和被解釋變量(Y)的觀測誤差;
        3)經(jīng)濟系統(tǒng)中無法控制、不易度量的隨機因素。


        再確定什么叫方差齊性:顧名思義,方差相等。與什么東西的方差呢?這里需要引入殘差的概念:殘差,即預(yù)測值和真實值之間的差值。而方差齊性,指的就是滿足隨機分布的殘差,如下圖所示:





        如何判斷數(shù)據(jù)是否滿足方差齊性呢?精確的判斷是很難做到的,我們可以通過上圖繪制X值與殘差的關(guān)系來大致估計,也可以用一個巧妙的方法:對殘差做簡單線性回歸,如果得到的直線大致平行于X軸,則說明滿足方差齊性。


        這種觀察自變量與殘差之間是否存在線性關(guān)系(BP法)或非線性關(guān)系(White檢驗)是較為常用的兩種方差齊性檢驗的方法。


        第四點,缺少多重共線性的意義:根據(jù)回歸分析的結(jié)果,一般而言我們能發(fā)現(xiàn)自變量X1、X2、... 等因素對Y的影響。但是存在一種情況:如果各個自變量x之間有很強的線性關(guān)系,就無法固定其他變量,也就找不到x和y之間真實的關(guān)系了,這就叫做多重共線性。


        有多種方法可以檢測多重共線性,較常使用的是回歸分析中的VIF值(方差膨脹因子),VIF值越大,多重共線性越嚴(yán)重。VIF怎么計算?VIF=1/(1-R^2), 其中R^2是樣本可決系數(shù)。樣本可決系數(shù)怎么計算?答案是通過殘差,這里有詳細(xì)的計算方法:



        一般認(rèn)為VIF大于10時(嚴(yán)格是5),代表模型存在嚴(yán)重的共線性問題。


        講了這么多理論知識,大家可能覺得比較枯燥,但是實際上本文最難的也就是這些理論知識,希望大家能好好消化。下面正式開始實操部分。

        0.準(zhǔn)

        開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒有,請訪問這篇文章:超詳細(xì)Python安裝指南?進(jìn)行安裝。

        如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.

        此外,推薦大家用VSCode編輯器,因為它有許多許多的優(yōu)點:Python 編程的最好搭檔—VSCode 詳細(xì)指南。

        準(zhǔn)備輸入命令安裝依賴,如果你沒有VSCode編輯器,Windows環(huán)境下打開 Cmd (開始-運行-CMD),蘋果系統(tǒng)環(huán)境下請打開 Terminal (command+空格輸入Terminal),如果你用的是VSCode編輯器或Pycharm,可以直接在下方的Terminal中輸入命令:

        pip install?pandas
        pip install?numpy
        pip install?matplotlib
        pip install?scikit-learn


        本篇文章使用的50_Startups.csv文件,由研發(fā)開銷、管理開銷、市場開銷、州和利潤五列數(shù)據(jù)組成。


        本文源代碼和數(shù)據(jù)文件,可以關(guān)注Python實用寶典公眾號,后臺回復(fù):機器學(xué)習(xí)3?下載。


        1.數(shù)據(jù)預(yù)處理


        導(dǎo)入庫


        import?pandas as?pd
        import?numpy as?np


        導(dǎo)入數(shù)據(jù)集


        最后一列利潤為Y值,其他均為X值。


        dataset = pd.read_csv('50_Startups.csv')
        X = dataset.iloc[:, :-1].values
        Y = dataset.iloc[:, 4].values


        將類別數(shù)據(jù)數(shù)字化


        將“州”這一列數(shù)字化。


        from?sklearn.preprocessing import?LabelEncoder, OneHotEncoder
        labelencoder = LabelEncoder()
        X[:, 3] = labelencoder.fit_transform(X[:, 3])
        # 一共有3個州
        onehotencoder = OneHotEncoder(categorical_features=[3])
        X = onehotencoder.fit_transform(X).toarray()


        躲避虛擬變量陷阱


        原始數(shù)據(jù)如下:



        在我們對“州”這列變量進(jìn)行數(shù)字化后,會在前面出現(xiàn)三列one_hot變量,每一列代表一個州。



        這就出現(xiàn)虛擬變量陷阱了,比如第一列我們能通過另外兩列的值得到:如果2、3列為0,第1列肯定為1,如果2、3列存在不為0的值,則第1列肯定為1。

        因此,這里第一列沒有使用的必要。


        X = X[: , 1:]


        拆分?jǐn)?shù)據(jù)集為訓(xùn)練集和測試集


        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)


        第二步:訓(xùn)練模型


        與簡單線性回歸一樣,使用LinearRegression即可實現(xiàn)多元線性回歸(sklearn已經(jīng)幫你處理好多元的情況)。


        from?sklearn.linear_model import?LinearRegression
        regressor = LinearRegression()
        regressor.fit(X_train, Y_train)


        第三步:預(yù)測結(jié)果


        一行搞定:


        y_pred = regressor.predict(X_test)
        print("real:", Y_test)
        print("predict:", y_pred)


        看看效果:



        畫個圖看看對比效果:


        map_index = list(range(len(Y_test)))
        plt.scatter(map_index, Y_test, color='red')
        plt.plot(map_index, y_pred, color='blue')
        plt.show()



        藍(lán)色的線是預(yù)測值,紅色的點是真實的值,可以看到預(yù)測效果還是不錯的。本文源代碼和數(shù)據(jù)文件,可以關(guān)注Python實用寶典公眾號,后臺回復(fù):機器學(xué)習(xí)3?下載。


        我們的文章到此就結(jié)束啦,如果你喜歡今天的Python 實戰(zhàn)教程,請持續(xù)關(guān)注Python實用寶典。

        有任何問題,可以在公眾號后臺回復(fù):加群,回答相應(yīng)紅字驗證信息,進(jìn)入互助群詢問。

        原創(chuàng)不易,希望你能在下面點個贊和在看支持我繼續(xù)創(chuàng)作,謝謝!

        點擊下方閱讀原文可獲得更好的閱讀體驗

        Python實用寶典?(pythondict.com)
        不只是一個寶典
        歡迎關(guān)注公眾號:Python實用寶典

        瀏覽 61
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            欧美老妇高潮潮喷视频 | 欧洲美同互女同互女 | 我与亲女的性关系自述视频 | 丰满秘书调教h | 国产偷抇久久精品A片69探花 | 精品wwww | 精东影业秘 国产传媒 | 国产无圣光 | 在线视频一区少妇露脸福利在线 | 五月天激情亚洲 |