1. 程式人生 > >Python機器學習之資料探索視覺化庫yellowbrick

Python機器學習之資料探索視覺化庫yellowbrick

背景介紹

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

前陣子看到這個庫可以較為便捷的實現資料探索,今天得空打算學習一下。原本訪問的是英文文件,結果發現已經有人在做漢化,雖然看起來也像是谷歌翻譯的,本著拿來主義,少費點精力的精神,就半抄半學,還是發現了一些與文件不太一致的地方。

# http://www.scikit-yb.org/zh/latest/quickstart.html
# http://www.scikit-yb.org/en/latest/quickstart.html
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"]
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

由上圖可以看出特徵向量7、8為強相關;0、1相關係數也比較高。
下面再來通過曲線擬合看看兩者的相關度。

from yellowbrick.features import JointPlotVisualizer
visualizer = JointPlotVisualizer(feature='temp', target='feelslike')
visualizer.fit(X['temp'], X['feelslike'])
visualizer.poof()

file

JointPlotVisualizer 讓我們能快速瀏覽有強相關性的特徵,以及各個特徵的範圍和分佈情況。需要注意的是圖中的各個軸都已經標準化到0到1之間的值,這是機器學習中一中非常常用的減少一個特徵對另一個影響的技術。

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

殘差圖還向我們展示了模型的誤差是怎麼產生的:那根加粗的水平線表示的是 residuals = 0 ,也就是沒有誤差;線上方或者下方的點則表示誤差值的大小。比如大部分殘差是負值,並且其值是由 actual - expected 算得,也就是說大部分時間預測值比實際值要大,比如和實際相比我們的模型總是預測有更多的騎手。|

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

alpha = visualizer.alpha_
visualizer.alpha_
3.612342699709438

在探索模型家族的過程中,第一個要考慮的是模型是怎樣變得更複雜的。當模型的複雜度增加,由於方差增加形成的誤差也相應增加,因為模型會變得過擬合併且不能泛化到未知資料上。然而,模型越簡單由於偏差造成的誤差就會越大;模型欠擬合,因此有更多的未中靶預測。大部分機器學習的目的就是要產生一個複雜度適中的模型,在偏差和方差之間找到一箇中間點。

對一個線性模型來說,複雜度來自於特徵本身以及根據模型賦予它們的值。因此對線性模型期望用最少的特徵達到最好的闡釋結果。正則化是實現如上目標的其中一種技術,即引入一個alpha引數來對其相互之間係數的權重進行標準化並且懲罰其複雜度。Alpha和複雜度之間是一個負相關。alpha值越大,複雜度越小,反之亦然。

我們現在可以訓練我們最終的模型並且用 PredictionError 對其進行可視化了:

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

用預測誤差visualizer將實際(測量)值對期望(預測)值進行視覺化。黑色的45度虛線表示誤差為0的點。和殘差圖一樣,這讓我們可以看到誤差在何處出現,值為多大。

在這個圖上,我們可以看到大部分的點集中在小於200騎手的位置。我們也許想要嘗試用正交匹配追蹤演算法(OMP)或者樣條(spline)來訓練一個將更多區域性考慮進來的迴歸模型。我們還可以看到殘差圖中奇怪的拓撲結構好像已被Ridge迴歸糾正,而且在我們的模型中大值和小值之間有了更多的平衡。Ridge正則化可能糾正了兩個特徵之間的協方差問題。當我們用其他模型的形式將我們的資料分析推進的同時,我們可以繼續visualizers來快速比較並且視覺化我們的結果。

希望這個流程讓你對怎樣將Visualizers通過Scikit-Learn整合到機器學習中去有一個概念,並且給你啟發讓你將其運用到你的工作中!如果想要了解更多的有關怎樣開始使用Yellowbrick的資訊,請檢視 模型選擇教程 。然後你就在 Visualizers and API 上快速檢視更多的特定visualizers了。


            
           

相關推薦

Python機器學習資料探索視覺yellowbrick

背景介紹 從學sklearn時,除了演算法的坎要過,還得學習matplotlib視覺化,對我的實踐應用而言,視覺化更重要一些,然而

Python機器學習資料探索視覺yellowbrick-tutorial

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

Python機器學習資料預處理

# -*- coding: utf-8 -*- """ Created on Sat Sep 29 22:39:26 2018 @author: Lxiao217 email:[email protected] """ #資料預處理 #CSV(comma-srpared values,

機器學習資料歸一

器學習中,資料歸一化是非常重要,如果不進行資料歸一化,可能會導致模型壞掉或者訓練出一個奇怪的模型。 為什麼要進行資料歸一化 現在有一個訓練資料集,包含兩個樣本,內容如下: 樣本1 1 200 樣本2 5

機器學習資料歸一問題

1.機器學習中,為何要經常對資料做歸一化: 1)歸一化後加快了梯度下降求最優解的速度;2)歸一化有可能提高精度。 1)歸一化為什麼能提高梯度下降法求解最優解的速度: 如下圖所示,藍色的圈圈圖代表的是兩個特徵的等高線。其中左圖兩個特徵X1和X2的區間相差非常大,X1區間是[0,2000],

Python機器學習資料視覺(三)

裝飾Matplotlib(標籤、文字、標記、註釋…) 在機器學習實際應用中,最關鍵的部分就是資料視覺化,否則無論除錯還是總結,你無從下手。python大牛們提供了非常牛逼的庫—Matplotlib 回顧 詳解影象組成 Figure 在

python機器學習--用凝聚層次聚類進行資料分組

1.什麼是層次聚類def perfrom_clustering(X,connectivity,title,num_clusters=3,linkage='ward'): plt.figure() model = AgglomerativeClustering(

FPGA機器學習資料探勘,影象處理,機器視覺,模式識別,人工智慧,機器學習的關係

資料探勘:          資料探勘從字面上就已經很好理解了,就是從一堆資料中,挖掘出一些有用的資訊來的過程。比如說,我們的搜尋資料,如果某個地區大部分人都在搜尋MH370,表示他們在關注這個事情。我們就可以推薦一些安全知識,飛機知識過去。同樣的也可能會有蠟燭銷售高潮

Python 機器學習開發環境

sta HR nta 命令行 make 語言 anaconda 使用總結 2.6 Python 數據分析庫 Python 編程語言 Pythong Tutorial: https://docs.python.org/3/tutorial/ NumPy 提供常用的數值數組、矩

Python機器學習梯度提升樹

pri () 糾正 ensemble depth del gbrt 1.5 cer #和隨機森林一樣,基於決策樹,采用連續的方式構建樹,深度很小max_depth<5.重要的參數n_estimate和learning_rate,這兩個參數的y作用在於對模型過擬合化得調

Bobo老師機器學習筆記-資料歸一

  實現演算法: def normalizate_max_min(X): """ 利用最大和最小化方式進行歸一化,過一化的資料集中在【0, 1】 :param X: :return: """ np.asarray(X, dty

Python讓你的資料生成視覺圖形

今天就用 pyecharts 庫來畫圖。 安裝:最簡單快速的命令安裝方法: pip install pyecharts 柱形圖 柱形圖簡明、醒目,是一種常用的統計圖形。以下生成的圖都可以點選 html 檔案開啟,點選圖形右邊下載按鈕可以下載到本地。 from py

Python基礎學習資料型別

#列表 list1=[1,2,3] print(type(list1))   #字典 dict1={"title":"web開發"} print(type(dict1)) print(dict1['title'])   #元組 tuple1=(11

機器學習資料集切分

機器學習之資料集切分 # -*- coding: utf-8 -*- """ Created on Mon Dec 10 09:32:55 2018 @author: muli """ from sklearn.model_selection import trai

機器學習資料標準化處理

機器學習之資料標準化處理 # -*- coding: utf-8 -*- """ Created on Sat Dec 8 16:41:32 2018 @author: muli """ from sklearn.preprocessing import MinM

Python Django+Echarts將資料視覺輸出

以上為最終結果 Django是開放原始碼的Web應用框架,由Python語言編寫。 pip3 install django安裝Django,並加入系統變數Path。 建立Django專案,並在PyCharm下的terminal輸入:python manage.py st

機器學習 資料預處理(sklearn preprocessing)

資料預處理(data preprocessing)是指在主要的處理以前對資料進行的一些處理。如對大部分地球物理面積性觀測資料在進行轉換或增強處理之前,首先將不規則分佈的測網經過插值轉換為規則網的處理,以利於計算機的運算。另外,對於一些剖面測量資料,如地震資料預處理有垂直疊加、

Python機器學習特徵工程

import numpy as np import matplotlib.pyplot as plt import pandas as pd import seaborn as sns from sklearn.model_selection import

python機器學習SMO演算法

SVM演算法計算到後面是一個帶約束條件的優化問題 這裡的SMO(Sequential Minimal Optimization)序列最小化演算法就是一個二次規劃優化演算法,可以用來解決上面的問題。SMO演算法是由John C.Platt在1998年提出的。SMO演算法的目

Python & 機器學習專案實踐

機器學習是一項經驗技能,經驗越多越好。在專案建立的過程中,實踐是掌握機器學習的最佳手段。在實踐過程中,通過實際操作加深對分類和迴歸問題的每一個步驟的理解,達到學習機器學習的目的。 預測模型專案模板 不能只通過閱讀來掌握機器學習的技能,需要進行大量的練習。