【翻譯】《利用Python進行數據分析·第2版》第13章(下) Python建模庫介紹

2021-03-02 Python愛好者社區

作者:SeanCheney   Python愛好者社區專欄作者

簡書專欄:https://www.jianshu.com/u/130f76596b02

前文傳送門:

【翻譯】《利用Python進行數據分析·第2版》第1章 準備工作

【翻譯】《利用Python進行數據分析·第2版》第2章(上)Python語法基礎,IPython和Jupyter

【翻譯】《利用Python進行數據分析·第2版》第2章(中)Python語法基礎,IPython和Jupyter

【翻譯】《利用Python進行數據分析·第2版》第2章(下)Python語法基礎,IPython和Jupyter

【翻譯】《利用Python進行數據分析·第2版》第3章(上)Python的數據結構、函數和文件

【翻譯】《利用Python進行數據分析·第2版》第3章(中)Python的數據結構、函數和文件

【翻譯】《利用Python進行數據分析·第2版》第3章(下)Python的數據結構、函數和文件

【翻譯】《利用Python進行數據分析·第2版》第4章(上)NumPy基礎:數組和矢量計算

【翻譯】《利用Python進行數據分析·第2版》第4章(中)NumPy基礎:數組和矢量計算

【翻譯】《利用Python進行數據分析·第2版》第4章(下)NumPy基礎:數組和矢量計算

【翻譯】《利用Python進行數據分析·第2版》第5章(上)pandas入門

【翻譯】《利用Python進行數據分析·第2版》第5章(中)pandas入門

【翻譯】《利用Python進行數據分析·第2版》第5章(下)pandas入門

【翻譯】《利用Python進行數據分析·第2版》第6章(上) 數據加載、存儲與文件格式

【翻譯】《利用Python進行數據分析·第2版》第6章(中) 數據加載、存儲與文件格式

【翻譯】《利用Python進行數據分析·第2版》第6章(下) 數據加載、存儲與文件格式

【翻譯】《利用Python進行數據分析·第2版》第7章(上)數據清洗和準備

【翻譯】《利用Python進行數據分析·第2版》第7章(中) 數據清洗和準備

【翻譯】《利用Python進行數據分析·第2版》第7章(下) 數據清洗和準備

【翻譯】《利用Python進行數據分析·第2版》第8章(上) 數據規整:聚合、合併和重塑

【翻譯】《利用Python進行數據分析·第2版》第8章(中) 數據規整:聚合、合併和重塑

【翻譯】《利用Python進行數據分析·第2版》第9章(上) 繪圖和可視化

【翻譯】《利用Python進行數據分析·第2版》第9章(中) 繪圖和可視化

  【翻譯】《利用Python進行數據分析·第2版》第9章(下) 繪圖和可視化

  【翻譯】《利用Python進行數據分析·第2版》第10章(上) 數據聚合與分組運算

  【翻譯】《利用Python進行數據分析·第2版》第10章(中) 數據聚合與分組運算

  【翻譯】《利用Python進行數據分析·第2版》第10章(下) 數據聚合與分組運算

  【翻譯】《利用Python進行數據分析·第2版》第11章(上) 時間序列

  【翻譯】《利用Python進行數據分析·第2版》第11章(中) 時間序列

  【翻譯】《利用Python進行數據分析·第2版》第11章(中二) 時間序列

  【翻譯】《利用Python進行數據分析·第2版》第11章(下) 時間序列

  【翻譯】《利用Python進行數據分析·第2版》第12章(上) pandas高級應用

  【翻譯】《利用Python進行數據分析·第2版》第12章(中) pandas高級應用

  【翻譯】《利用Python進行數據分析·第2版》第12章(下) pandas高級應用

  【翻譯】《利用Python進行數據分析·第2版》第13章(上) Python建模庫介紹

  【翻譯】《利用Python進行數據分析·第2版》第13章(中) Python建模庫介紹

  【翻譯】《利用Python進行數據分析·第2版》第13章(中二) Python建模庫介紹

13.4 scikit-learn介紹

scikit-learn是一個廣泛使用、用途多樣的Python機器學習庫。它包含多種標準監督和非監督機器學習方法和模型選擇和評估、數據轉換、數據加載和模型持久化工具。這些模型可以用於分類、聚合、預測和其它任務。

機器學習方面的學習和應用scikit-learn和TensorFlow解決實際問題的線上和紙質資料很多。本節中,我會簡要介紹scikit-learn API的風格。

寫作此書的時候,scikit-learn並沒有和pandas深度結合,但是有些第三方包在開發中。儘管如此,pandas非常適合在模型擬合前處理數據集。

舉個例子,我用一個Kaggle競賽的經典數據集,關於鐵達尼號乘客的生還率。我們用pandas加載測試和訓練數據集:

In [86]: train = pd.read_csv('datasets/titanic/train.csv')In [87]: test = pd.read_csv('datasets/titanic/test.csv')In [88]: train[:4]Out[88]:   PassengerId  Survived  Pclass  \0            1         0       3   1            2         1       1   2            3         1       3   3            4         1       1                                                  Name     Sex   Age  SibSp  \0                            Braund, Mr. Owen Harris    male  22.0      1   1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   2                             Heikkinen, Miss. Laina  female  26.0      0   3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1     Parch            Ticket     Fare Cabin Embarked  0      0         A/5 21171   7.2500   NaN        S  1      0          PC 17599  71.2833   C85        C  2      0  STON/O2. 3101282   7.9250   NaN        S  3      0            113803  53.1000  C123        S

statsmodels和scikit-learn通常不能接收缺失數據,因此我們要查看列是否包含缺失值:

In [89]: train.isnull().sum()Out[89]: PassengerId      0Survived         0Pclass           0Name             0Sex              0Age            177SibSp            0Parch            0Ticket           0Fare             0Cabin          687Embarked         2dtype: int64In [90]: test.isnull().sum()Out[90]: PassengerId      0Pclass           0Name             0Sex              0Age             86SibSp            0Parch            0Ticket           0Fare             1Cabin          327Embarked         0dtype: int64

在統計和機器學習的例子中,根據數據中的特徵,一個典型的任務是預測乘客能否生還。模型現在訓練數據集中擬合,然後用樣本外測試數據集評估。

我想用年齡作為預測值,但是它包含缺失值。缺失數據補全的方法有多種,我用的是一種簡單方法,用訓練數據集的中位數補全兩個表的空值:

In [91]: impute_value = train['Age'].median()In [92]: train['Age'] = train['Age'].fillna(impute_value)In [93]: test['Age'] = test['Age'].fillna(impute_value)

現在我們需要指定模型。我增加了一個列IsFemale,作為「Sex」列的編碼:

In [94]: train['IsFemale'] = (train['Sex'] == 'female').astype(int)In [95]: test['IsFemale'] = (test['Sex'] == 'female').astype(int)

然後,我們確定一些模型變量,並創建NumPy數組:

In [96]: predictors = ['Pclass', 'IsFemale', 'Age']In [97]: X_train = train[predictors].valuesIn [98]: X_test = test[predictors].valuesIn [99]: y_train = train['Survived'].valuesIn [100]: X_train[:5]Out[100]: array([[  3.,   0.,  22.],       [  1.,   1.,  38.],       [  3.,   1.,  26.],       [  1.,   1.,  35.],       [  3.,   0.,  35.]])In [101]: y_train[:5]Out[101]: array([0, 1, 1, 1, 0])

我不能保證這是一個好模型,它的特徵都符合。我們用scikit-learn的LogisticRegression模型,創建一個模型實例:

In [102]: from sklearn.linear_model import LogisticRegressionIn [103]: model = LogisticRegression()

與statsmodels類似,我們可以用模型的fit方法,將它擬合到訓練數據:

In [104]: model.fit(X_train, y_train)Out[104]: LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,          verbose=0, warm_start=False)

現在,我們可以用model.predict,對測試數據進行預測:

In [105]: y_predict = model.predict(X_test)In [106]: y_predict[:10]Out[106]: array([0, 0, 0, 0, 1, 0, 1, 0, 1, 0])

如果你有測試數據集的真是值,你可以計算準確率或其它錯誤度量值:

(y_true == y_predict).mean()

在實際中,模型訓練經常有許多額外的複雜因素。許多模型有可以調節的參數,有些方法(比如交叉驗證)可以用來進行參數調節,避免對訓練數據過擬合。這通常可以提高預測性或對新數據的健壯性。

交叉驗證通過分割訓練數據來模擬樣本外預測。基於模型的精度得分(比如均方差),可以對模型參數進行網格搜索。有些模型,如logistic回歸,有內置的交叉驗證的估計類。例如,logisticregressioncv類可以用一個參數指定網格搜索對模型的正則化參數C的粒度:

In [107]: from sklearn.linear_model import LogisticRegressionCVIn [108]: model_cv = LogisticRegressionCV(10)In [109]: model_cv.fit(X_train, y_train)Out[109]: LogisticRegressionCV(Cs=10, class_weight=None, cv=None, dual=False,           fit_intercept=True, intercept_scaling=1.0, max_iter=100,           multi_class='ovr', n_jobs=1, penalty='l2', random_state=None,           refit=True, scoring=None, solver='lbfgs', tol=0.0001, verbose=0)

要手動進行交叉驗證,你可以使用cross_val_score幫助函數,它可以處理數據分割。例如,要交叉驗證我們的帶有四個不重疊訓練數據的模型,可以這樣做:

In [110]: from sklearn.model_selection import cross_val_scoreIn [111]: model = LogisticRegression(C=10)In [112]: scores = cross_val_score(model, X_train, y_train, cv=4)In [113]: scoresOut[113]: array([ 0.7723,  0.8027,  0.7703,  0.7883])

默認的評分指標取決於模型本身,但是可以明確指定一個評分狠話。交叉驗證過的模型需要更長時間來訓練,但會有更高的模型性能。

13.5 繼續學習

我只是介紹了一些Python建模庫的表面內容,現在有越來越多的框架用於各種統計和機器學習,它們都是用Python或Python用戶界面實現的。

這本書的重點是數據規整,有其它的書是關注建模和數據科學工具的。其中優秀的有:

Andreas Mueller and Sarah Guido (O』Reilly)的 《Introduction to Machine Learning with Python》

Jake VanderPlas (O』Reilly)的 《Python Data Science Handbook》

Joel Grus (O』Reilly) 的 《Data Science from Scratch: First Principles》

Sebastian Raschka (Packt Publishing) 的《Python Machine Learning》

Aurélien Géron (O』Reilly) 的《Hands-On Machine Learning with Scikit-Learn and TensorFlow》

雖然書是學習的好資源,但是隨著底層開源軟體的發展,書的內容會過時。最好是不斷熟悉各種統計和機器學習框架的文檔,學習最新的功能和API。

讚賞作者

今晚好課推薦,名額有限,下圖掃碼即可免費學

Python愛好者社區歷史文章大合集

Python愛好者社區歷史文章列表(每周append更新一次)

福利:文末掃碼立刻關注公眾號,「Python愛好者社區」,開始學習Python課程:

關注後在公眾號內回復課程即可獲取:

小編的Python入門視頻課程!!!

崔老師爬蟲實戰案例免費學習視頻。

丘老師數據科學入門指導免費學習視頻。

陳老師數據分析報告製作免費學習視頻。

玩轉大數據分析!Spark2.X+Python 精華實戰課程免費學習視頻。

丘老師Python網絡爬蟲實戰免費學習視頻。

相關焦點

  • 【翻譯】《利用Python進行數據分析·第2版》第13章(中) Python建模庫介紹
    《利用Python進行數據分析·第2版》第4章(上)NumPy基礎:數組和矢量計算【翻譯】《利用Python進行數據分析·第2版》第4章(中)NumPy基礎:數組和矢量計算【翻譯】《利用Python進行數據分析·第2版》第4章(下)NumPy基礎:數組和矢量計算【翻譯】《利用Python進行數據分析·第2版》第5章(上)pandas入門【翻譯】
  • 【翻譯】《利用Python進行數據分析·第2版》第12章(中) pandas高級應用
    《利用Python進行數據分析·第2版》第4章(上)NumPy基礎:數組和矢量計算【翻譯】《利用Python進行數據分析·第2版》第4章(中)NumPy基礎:數組和矢量計算【翻譯】《利用Python進行數據分析·第2版》第4章(下)NumPy基礎:數組和矢量計算【翻譯】《利用Python進行數據分析·第2版》第5章(上)pandas入門【翻譯】
  • 【翻譯】《利用Python進行數據分析·第2版》第6章(中) 數據加載、存儲與文件格式
    】《利用Python進行數據分析·第2版》第1章 準備工作【翻譯】《利用Python進行數據分析·第2版》第2章(上)Python語法基礎,IPython和Jupyter【翻譯】《利用Python進行數據分析·第2版》第2章(中)Python語法基礎,IPython和Jupyter【翻譯】《利用Python進行數據分析
  • 【翻譯】《利用Python進行數據分析·第2版》第7章(中) 數據清洗和準備
    】《利用Python進行數據分析·第2版》第1章 準備工作【翻譯】《利用Python進行數據分析·第2版》第2章(上)Python語法基礎,IPython和Jupyter【翻譯】《利用Python進行數據分析·第2版》第2章(中)Python語法基礎,IPython和Jupyter【翻譯】《利用Python進行數據分析
  • 【翻譯】《利用Python進行數據分析·第2版》第4章(上)NumPy基礎:數組和矢量計算
    】《利用Python進行數據分析·第2版》第1章 準備工作【翻譯】《利用Python進行數據分析·第2版》第2章(上)Python語法基礎,IPython和Jupyter【翻譯】《利用Python進行數據分析·第2版》第2章(中)Python語法基礎,IPython和Jupyter【翻譯】《利用Python進行數據分析
  • 【翻譯】《利用Python進行數據分析·第2版》第4章(下)NumPy基礎:數組和矢量計算
    】《利用Python進行數據分析·第2版》第1章 準備工作【翻譯】《利用Python進行數據分析·第2版》第2章(上)Python語法基礎,IPython和Jupyter【翻譯】《利用Python進行數據分析·第2版》第2章(中)Python語法基礎,IPython和Jupyter【翻譯】《利用Python進行數據分析
  • python必備書籍pdf下載
    書中結合代碼示例生動透徹地講述了面向對象思想的精髓,讓讀者真正學會以對象方式進行思考。本書共15章,在結構上可以分為兩部分:第壹部分包括第1~10章,探討面向對象的基本概念,比如封裝、多態、繼承等;第二部分包括第11~15章,專注於將這些概念應用於一些通用的面向對象技術中,並結合了一些實用的應用程式。7002 可愛的Python(哲思社區.插圖版_文字版)
  • 《Python 機器學習》-Python Machine Learning第一版+第二版(附電子版 pdf)
    全書共16章,除了簡要介紹機器學習及Python在機器學習中的應用,還系統講述了數據分類、數據預處理、模型優化、集成學習、回歸、聚類、神經網絡、深度學習等內容。本書將機器學習背後的基本理論與應用實踐聯繫起來,通過這種方式讓讀者聚焦於如何正確地提出問題、解決問題。本書講解了如何使用Python的核心元素以及強大的機器學習庫,同時還展示了如何正確使用一系列統計模型。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    > 3-01數據案例介紹 3-02集中趨勢,離中趨勢 3-03數據分布-偏態與峰度 3-04抽樣理論 3-05編碼實現 3-06數據分類 3-07異常值分析 3-08對比分析 3-09結構分析 3-10分布分析 3-11 satisfaction level的分析
  • 開源《Python 機器學習》-Python Machine Learning第一版+第二版(附電子版 pdf)
    全書共16章,除了簡要介紹機器學習及Python在機器學習中的應用,還系統講述了數據分類、數據預處理、模型優化、集成學習、回歸、聚類、神經網絡、深度學習等內容。本書將機器學習背後的基本理論與應用實踐聯繫起來,通過這種方式讓讀者聚焦於如何正確地提出問題、解決問題。本書講解了如何使用Python的核心元素以及強大的機器學習庫,同時還展示了如何正確使用一系列統計模型。
  • 利用Anaconda在Windows及Linux下搭建Python環境【手把手版】
    ❝本文詳細介紹利用Anaconda在Windows及Linux下配置Python環境。python數據分析包|NumPy-01python數據分析包|NumPy-02python數據分析包|Pandas-01之DataFrame&Seriespython數據分析包|Pandas-02之缺失值(NA)處理python數據分析包|Pandas-03pandas讀寫表格數據python數據分析包|Pandas&NumPy小抄(Cheat_Sheet
  • 《Python 機器學習》第一版+第二版(附電子版 pdf)
    全書共16章,除了簡要介紹機器學習及Python在機器學習中的應用,還系統講述了數據分類、數據預處理、模型優化、集成學習、回歸、聚類、神經網絡、深度學習等內容。本書將機器學習背後的基本理論與應用實踐聯繫起來,通過這種方式讓讀者聚焦於如何正確地提出問題、解決問題。本書講解了如何使用Python的核心元素以及強大的機器學習庫,同時還展示了如何正確使用一系列統計模型。
  • python金融風控評分卡模型和數據分析
    (原創課程,版權所有,項目合作QQ:231469242,微信公眾號:pythonEducation) 課程介紹python金融風控評分卡模型和數據分析微專業課包含《python信用評分卡建模(附代碼)》,《python風控建模實戰lendingClub》,《金融現金貸用戶數據分析和畫像》三套課程系列
  • 如何使用python完成數學建模常見算法
    在數學建模中主流的程式語言是MATLAB,但隨著python/R中數學軟體包的不斷完善,熟悉這兩種程式語言的同學也可以快速數學建模的編程環節。後面我們將介紹幾種常見數學建模算法的python實現,旨在展示python在本領域的強大威力。
  • Python做數據分析-簡潔、易讀、強大
    是最流行的用於繪製數據圖表的Python庫。它最初由John D. Hunter(JDH)創建,目前由一個龐大的開發人員團隊維護。它非常適合創建出版物上用的圖表。它跟IPython(馬上就會講到)結合得很好,因而提供了一種非常好用的交互式數據繪圖環境。繪製的圖表也是交互式的,你可以利用繪圖窗口中的工具欄放大圖表中的某個區域或對整個圖表進行平移瀏覽。
  • 140種Python標準庫、第三方庫和外部工具都有了
    MySQL-python25. cx_Oracle類型:第三方庫描述:Oracle連接庫推薦度:★★★26. psycopg2HappyBase類型:第三方庫描述:HBase連接庫推薦度:★★★30. py2neo類型:第三方庫
  • 在Python中進行探索式數據分析(EDA)
    介紹探索性數據分析(Exploratory Data Analysis ,EDA)是對數據進行分析並得出規律的一種數據分析方法。它是一個故事,一個數據試圖講述的故事。EDA是一種利用各種工具和圖形技術(如柱狀圖、直方圖等)分析數據的方法。
  • 盤點python數據工程師需要掌握的18個庫
    Python的一大優勢是具有豐富的第三方庫,可以幫你節省大量的開發工作。很多同學學習Python的目的都是為了進行數據分析。今天我們就來整理一下Python中在數據分析領域使用最廣泛的一些庫。掌握這些庫,進行數據分析相關任務時就可以隨心所欲了!
  • 讓所有程式設計師絕不能錯過的59個Python庫總結!
    Python有以下三個特點:易用性和靈活性全行業高接受度:Python無疑是業界最流行的數據科學語言用於數據科學的Python庫的豐富數量優勢本文介紹了python人最常用的59個python庫。一起來看看吧~用於數據收集的Python庫1.
  • wxpy庫+Pyecharts庫:用Python對微信好友進行數據分析
    本文結構:一、前言二、Python庫簡單介紹wxpy庫Pyechats庫re庫jieba庫和collections庫三、分析結果和代碼展示1、數據準備導入需要的Python庫使用wxpy庫登錄微信整合數據2、數據分析微信好友的男女比例微信好友的省份分布微信好友的城市分布微信好友個性籤名分析一、前言之前在某個微信公眾號上貌似看到過一個文章