Python機器學習之數據探索可視化庫yellowbrick

来源:https://www.cnblogs.com/yeayee/archive/2019/08/20/11383620.html
-Advertisement-
Play Games

# 背景介紹 從學sklearn時,除了演算法的坎要過,還得學習matplotlib可視化,對我的實踐應用而言,可視化更重要一些,然而matplotlib的易用性和美觀性確實不敢恭維。陸續使用過plotly、seaborn,最終定格在了Bokeh,因為它可以與Flask完美的結合,數據看板的開發難度降 ...


# 背景介紹 從學sklearn時,除了演算法的坎要過,還得學習matplotlib可視化,對我的實踐應用而言,可視化更重要一些,然而matplotlib的易用性和美觀性確實不敢恭維。陸續使用過plotly、seaborn,最終定格在了Bokeh,因為它可以與Flask完美的結合,數據看板的開發難度降低了很多。 前陣子看到這個庫可以較為便捷的實現數據探索,今天得空打算學習一下。原本訪問的是英文文檔,結果發現已經有人在做漢化,雖然看起來也像是谷歌翻譯的,本著拿來主義,少費點精力的精神,就半抄半學,還是發現了一些與文檔不太一致的地方。 ```python # http://www.scikit-yb.org/zh/latest/quickstart.html # http://www.scikit-yb.org/en/latest/quickstart.html ``` ```python import pandas as pd data = pd.read_csv('data/bikeshare/bikeshare.csv') X = data[[ "season", "month", "hour", "holiday", "weekday", "workingday", "weather", "temp", "feelslike", "humidity", "windspeed" ]] y = data["riders"] ``` ```python from yellowbrick.features import Rank2D visualizer = Rank2D(algorithm="pearson") visualizer.fit_transform(X.values) visualizer.poof() # 在notebook顯示 # visualizer.poof(outpath="pcoords.jpg",clear_figure=True) # 輸出為png、jpg格式 ``` ![file](https://img2018.cnblogs.com/blog/816924/201908/816924-20190820161831349-565028432.jpg) 由上圖可以看出特征向量7、8為強相關;0、1相關係數也比較高。 下麵再來通過曲線擬合看看兩者的相關度。 ```python from yellowbrick.features import JointPlotVisualizer visualizer = JointPlotVisualizer(feature='temp', target='feelslike') visualizer.fit(X['temp'], X['feelslike']) visualizer.poof() ``` ![file](https://img2018.cnblogs.com/blog/816924/201908/816924-20190820161831598-1738368309.jpg) JointPlotVisualizer 讓我們能快速瀏覽有強相關性的特征,以及各個特征的範圍和分佈情況。需要註意的是圖中的各個軸都已經標準化到0到1之間的值,這是機器學習中一中非常常用的減少一個特征對另一個影響的技術。 ```python from yellowbrick.regressor import ResidualsPlot from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split # Create training and test sets X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.1 ) visualizer = ResidualsPlot(LinearRegression()) visualizer.fit(X_train, y_train) visualizer.score(X_test, y_test) visualizer.poof() ``` ![file](https://img2018.cnblogs.com/blog/816924/201908/816924-20190820161831884-1916263666.jpg) 殘差圖還向我們展示了模型的誤差是怎麼產生的:那根加粗的水平線表示的是 residuals = 0 ,也就是沒有誤差;線上方或者下方的點則表示誤差值的大小。比如大部分殘差是負值,並且其值是由 actual - expected 算得,也就是說大部分時間預測值比實際值要大,比如和實際相比我們的模型總是預測有更多的騎手。| ```python import numpy as np from sklearn.linear_model import RidgeCV from yellowbrick.regressor import AlphaSelection # RidgeCV:多個阿爾法,得出多個對應最佳的w,然後得到最佳的w及對應的阿爾法 alphas = np.logspace(-10, 1, 200) visualizer = AlphaSelection(RidgeCV(alphas=alphas)) visualizer.fit(X, y) visualizer.poof() ``` ![file](https://img2018.cnblogs.com/blog/816924/201908/816924-20190820161832113-905205069.jpg) ```python alpha = visualizer.alpha_ visualizer.alpha_ ``` 3.612342699709438 在探索模型家族的過程中,第一個要考慮的是模型是怎樣變得更*複雜*的。當模型的複雜度增加,由於方差增加形成的誤差也相應增加,因為模型會變得過擬合併且不能泛化到未知數據上。然而,模型越簡單由於偏差造成的誤差就會越大;模型欠擬合,因此有更多的未中靶預測。大部分機器學習的目的就是要產生一個*複雜度適中*的模型,在偏差和方差之間找到一個中間點。 對一個線性模型來說,複雜度來自於特征本身以及根據模型賦予它們的值。因此對線性模型期望用*最少的特征*達到最好的闡釋結果。*正則化*是實現如上目標的其中一種技術,即引入一個alpha參數來對其相互之間繫數的權重進行標準化並且懲罰其複雜度。Alpha和複雜度之間是一個負相關。alpha值越大,複雜度越小,反之亦然。 我們現在可以訓練我們最終的模型並且用 PredictionError 對其進行可視化了: ```python from sklearn.linear_model import Ridge from yellowbrick.regressor import PredictionError visualizer = PredictionError(Ridge(alpha=alpha)) visualizer.fit(X_train, y_train) visualizer.score(X_test, y_test) visualizer.poof() ``` ![file](https://img2018.cnblogs.com/blog/816924/201908/816924-20190820161832329-1656015226.jpg) 用預測誤差visualizer將實際(測量)值對期望(預測)值進行可視化。黑色的45度虛線表示誤差為0的點。和殘差圖一樣,這讓我們可以看到誤差在何處出現,值為多大。 在這個圖上,我們可以看到大部分的點集中在小於200騎手的位置。我們也許想要嘗試用正交匹配追蹤演算法(OMP)或者樣條(spline)來訓練一個將更多區域性考慮進來的回歸模型。我們還可以看到殘差圖中奇怪的拓撲結構好像已被Ridge回歸糾正,而且在我們的模型中大值和小值之間有了更多的平衡。Ridge正則化可能糾正了兩個特征之間的協方差問題。當我們用其他模型的形式將我們的數據分析推進的同時,我們可以繼續visualizers來快速比較並且可視化我們的結果。 希望這個流程讓你對怎樣將Visualizers通過Scikit-Learn整合到機器學習中去有一個概念,並且給你啟發讓你將其運用到你的工作中!如果想要瞭解更多的有關怎樣開始使用Yellowbrick的信息,請查看 模型選擇教程 。然後你就在 Visualizers and API 上快速查看更多的特定visualizers了。 ```python ```
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先linux 下查看mysql相關目錄 查看 mysql 的安裝路徑 執行查詢 SQL mysql>show variables like '%dir%'; mysql>show variables like '%dir%'; datadir 就是數據路徑 確定了運行路徑,執行導入、導出mysql ...
  • 使用python鏈接mysql讀入一個表並把它再寫到hbase 里去(九頭蛇萬歲) 先聲明一下需要用的庫: 倆!!: happybase (寫這個的老哥真的happy) pymysql 建議使用anaconda進行相應版本匹配安裝,在裝happybase的時候,conda預設的channel是找不到 ...
  • ranger大數據領域的一個集中式安全管理框架,它可以對諸如hdfs、hive、kafka、storm等組件進行細粒度的許可權控制。本文將介紹部署過程 1. 部署準備 ranger: 進入apach官網下載 http://ranger.apache.org/download.html, 本次使用的是r ...
  • [學習筆記] 3."超"關鍵字(super keyword) Super是一個參考(或說指針)指向他緊鄰的父類(見下麵的例子)。用super可以指向被隱藏的父類的同名成員。 3.1 super指向父類的成員 註意: 下例中:子類和父類都有i,我們一共有兩個i,用super可以指向前一個父類的i。 例 ...
  • --查看表空間的真實使用情況 set linesize 500 pagesize 500 col tablespace_name format a25 col TP_REAL_GB format a15 col TP_REAL_FREE_GB format a20 select all_tp.TP_... ...
  • 1.嚴格檢查輸入變數的類型和格式 2.對用戶名做強校驗 3.對sql中的特殊字元做轉義 4. 同樣轉義 mysqli_real_escape_string()轉義字元串中的特殊字元: ...
  • 1.預編譯機制(一次編譯多次執行,防止sql註入) 2.預編譯機制 ...
  • 背景介紹 從學sklearn時,除了演算法的坎要過,還得學習matplotlib可視化,對我的實踐應用而言,可視化更重要一些,然而matplotlib的易用性和美觀性確實不敢恭維。陸續使用過plotly、seaborn,最終定格在了Bokeh,因為它可以與Flask完美的結合,數據看板的開發難度降低了 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...