Python視覺化神器Yellowbrick使用
作者:沂水寒城,CSDN部落格專家,個人研究方向:機器學習、深度學習、NLP、CV
Blog: http://yishuihancheng.blog.csdn.net
在機器學習、資料探勘領域裡面,接觸到資料處理分析的人來說,資料探索是非常重要的一部分工作,而資料視覺化會成為資料分析工程師完成資料探索工作的有力工具。本文主要是介紹一款我日常使用較多的視覺化利器Yellowbrick,這是一款基於sklearn+matplotlib模組構建的更加高階的視覺化工具,能夠更加方便地完成很多資料探索、分詞與展示工作。
學習使用一個模組最好的方式就是學習它提供的API,下面先給出來幾個比較好的參考地址:
1)官方文件地址(英文)
https://www.scikit-yb.org/en/latest/
2)官方文件地址(中文)
http://www.scikit-yb.org/zh/latest/
Yellowbrick是由一套被稱為"Visualizers"組成的視覺化診斷工具組成的集合,其由Scikit-Learn API延伸而來,對模型選擇過程其指導作用。總之,Yellowbrick結合了Scikit-Learn和Matplotlib並且最好得傳承了Scikit-Learn文件,對你的模型進行視覺化!
想要了解Yellowbrick就必須先了解Visualizers,它是estimators從資料中學習得的物件,其主要任務是產生可對模型選擇過程有更深入瞭解的檢視。從Scikit-Learn來看,當視覺化資料空間或者封裝一個模型estimator時,其和轉換器(transformers)相似,就像"ModelCV" (比如RidgeCV,LassoCV)的工作原理一樣。Yellowbrick的主要目標是建立一個和Scikit-Learn類似的有意義的API。
Yellowbrick中最受歡迎的visualizers包括:
如此強大的視覺化工具,安裝方式卻很簡單,使用下面的命令:
pip install yellowbrick
如果需要升級最新版本的則可以使用下面的命令:
pip install –u yellowbrick
安裝完成後,我們就可以進行使用了。該模組提供了幾個常用的可用於實驗使用的資料集,如下所示:
進入到對應資料集資料夾下面,都會有三個檔案,對於bikeshare如下:
其中:bikeshare.csv為資料集檔案,如:
Meta.json為欄位元資訊檔案,如:
README.md為介紹說明檔案,如:
基於共享單車資料集,簡單的資料分析工作實現如下:
def testFunc5(savepath='Results/bikeshare_Rank2D.png'):
'''
共享單車資料集預測
'''
data=pd.read_csv('bikeshare/bikeshare.csv')
X=data[["season", "month", "hour", "holiday", "weekday", "workingday",
"weather", "temp", "feelslike", "humidity", "windspeed"
]]
y=data["riders"]
visualizer=Rank2D(algorithm="pearson")
visualizer.fit_transform(X)
visualizer.poof(outpath=savepath)
def testFunc6(savepath='Results/bikeshare_temperate_feelslike_relation.png'):
'''
進一步考察相關性
'''
data=pd.read_csv('bikeshare/bikeshare.csv')
X=data[["season", "month", "hour", "holiday", "weekday", "workingday",
"weather", "temp", "feelslike", "humidity", "windspeed"]]
y=data["riders"]
visualizer=JointPlotVisualizer(feature='temp', target='feelslike')
visualizer.fit(X['temp'], X['feelslike'])
visualizer.poof(outpath=savepath)
def testFunc7(savepath='Results/bikeshare_LinearRegression_ResidualsPlot.png'):
'''
基於共享單車資料使用線性迴歸模型預測
'''
data = pd.read_csv('bikeshare/bikeshare.csv')
X=data[["season", "month", "hour", "holiday", "weekday", "workingday",
"weather", "temp", "feelslike", "humidity", "windspeed"]]
y=data["riders"]
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3)
visualizer=ResidualsPlot(LinearRegression())
visualizer.fit(X_train, y_train)
visualizer.score(X_test, y_test)
visualizer.poof(outpath=savepath)
def testFunc8(savepath='Results/bikeshare_RidgeCV_AlphaSelection.png'):
'''
基於共享單車資料使用AlphaSelection
'''
data=pd.read_csv('bikeshare/bikeshare.csv')
X=data[["season", "month", "hour", "holiday", "weekday", "workingday",
"weather", "temp", "feelslike", "humidity", "windspeed"]]
y=data["riders"]
alphas=np.logspace(-10, 1, 200)
visualizer=AlphaSelection(RidgeCV(alphas=alphas))
visualizer.fit(X, y)
visualizer.poof(outpath=savepath)
def testFunc9(savepath='Results/bikeshare_Ridge_PredictionError.png'):
'''
基於共享單車資料繪製預測錯誤圖
'''
data=pd.read_csv('bikeshare/bikeshare.csv')
X=data[["season", "month", "hour", "holiday", "weekday", "workingday",
"weather", "temp", "feelslike", "humidity", "windspeed"]]
y=data["riders"]
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3)
visualizer=PredictionError(Ridge(alpha=3.181))
visualizer.fit(X_train, y_train)
visualizer.score(X_test, y_test)
visualizer.poof(outpath=savepath)
bikeshare_Rank2D.png特徵相關性計算
bikeshare_LinearRegression_ResidualsPlot.png使用線性迴歸模型預測
bikeshare_RidgeCV_AlphaSelection.png使用AlphaSelection特徵選擇
bikeshare_Ridge_PredictionError.png繪製預測錯誤圖
除了可以直接對資料進行分析展示之外,Yellowbrick同樣可以對文字資料進行處理分析,下面我們基於愛好資料集進行簡單的使用說明,具體程式碼實現如下所示:
def hobbiesFreqDistVisualizer():
'''
文字視覺化
Token 頻率分佈:繪製語料庫中令牌的頻率
t-SNE 語料庫視覺化:繪製更接近發現聚類的類似文件
'''
corpus=load_corpus("data/hobbies")
vectorizer = CountVectorizer()
docs = vectorizer.fit_transform(corpus.data)
features = vectorizer.get_feature_names()
visualizer = FreqDistVisualizer(features=features)
visualizer.fit(docs)
visualizer.poof(outpath='text_hobbies_FreqDistVisualizer.png')
#去停用詞
vectorizer = CountVectorizer(stop_words='english')
docs = vectorizer.fit_transform(corpus.data)
features = vectorizer.get_feature_names()
visualizer = FreqDistVisualizer(features=features)
visualizer.fit(docs)
visualizer.poof(outpath='text_hobbies_FreqDistVisualizer_stop_words.png')
def hobbiesFreqDistVisualizer2():
'''
探索 烹飪和遊戲 兩種愛好的頻度分佈
(報錯:沒有label,應該為corpus.target)
'''
corpus=load_corpus("data/hobbies")
#烹飪愛好頻度分佈統計圖
hobbies=defaultdict(list)
for text,label in zip(corpus.data,corpus.target):
hobbies[label].append(text)
vectorizer = CountVectorizer(stop_words='english')
docs = vectorizer.fit_transform(text for text in hobbies['cooking'])
features = vectorizer.get_feature_names()
visualizer = FreqDistVisualizer(features=features)
visualizer.fit(docs)
visualizer.poof(outpath='text_hobbies_cooking_FreqDistVisualizer.png')
#遊戲愛好頻度分佈統計圖
hobbies=defaultdict(list)
for text,label in zip(corpus.data, corpus.target):
hobbies[label].append(text)
vectorizer = CountVectorizer(stop_words='english')
docs = vectorizer.fit_transform(text for text in hobbies['gaming'])
features = vectorizer.get_feature_names()
visualizer = FreqDistVisualizer(features=features)
visualizer.fit(docs)
visualizer.poof(outpath='text_hobbies_gaming_FreqDistVisualizer.png')
def hobbiesTSNEVisualizer():
'''
t-SNE語料庫視覺化
T分佈隨機鄰域嵌入,t-SNE。Scikit-Learn將此分解方法實現為sklearn.manifold.TSNE轉換器。
通過使用來自原始維度和分解維度的不同分佈將高維文件向量分解為二維。 通過分解為2維或3維,
可以使用散點圖來顯示文件。
'''
corpus=load_corpus("data/hobbies")
tfidf = TfidfVectorizer()
docs = tfidf.fit_transform(corpus.data)
labels = corpus.target
tsne = TSNEVisualizer()
tsne.fit(docs, labels)
tsne.poof(outpath='text_hobbies_TSNEVisualizer.png')
#Don't color points with their classes
tsne = TSNEVisualizer(labels=["documents"])
tsne.fit(docs)
tsne.poof(outpath='text_hobbies_TSNEVisualizer_nocolor.png')
def hobbiesClusterTSNEVisualizer():
'''
聚類應用
'''
corpus=load_corpus("data/hobbies")
tfidf = TfidfVectorizer()
docs = tfidf.fit_transform(corpus.data)
clusters=KMeans(n_clusters=5)
clusters.fit(docs)
tsne=TSNEVisualizer()
tsne.fit(docs,["c{}".format(c) for c in clusters.labels_])
tsne.poof(outpath='text_hobbies_cluster_TSNEVisualizer.png')
text_hobbies_FreqDistVisualizer.png
text_hobbies_FreqDistVisualizer_stop_words.png
text_hobbies_cooking_FreqDistVisualizer.png
text_hobbies_gaming_FreqDistVisualizer.png
text_hobbies_TSNEVisualizer.png
text_hobbies_TSNEVisualizer_nocolor.png
text_hobbies_cluster_TSNEVisualizer.png
這裡簡單介紹一些TSNE,t-distributed Stochastic Neighbor Embedding(t-SNE)是目前來說效果最好的資料降維與視覺化方法,但是它的缺點也很明顯,比如:佔記憶體大,執行時間長。但是,當我們想要對高維資料進行分類,又不清楚這個資料集有沒有很好的可分性(即同類之間間隔小,異類之間間隔大),可以通過 t-SNE 投影到 2 維或者3維的空間中觀察一下。如果在低維空間中具有可分性,則資料是可分的;如果在高維空間中不具有可分性,可能是資料不可分,也可能僅僅是因為不能投影到低維空間。
TSNE將資料點之間的相似度轉換為概率。原始空間中的相似度由高斯聯合概率表示,嵌入空間的相似度由“Student t 分佈”表示。雖然 Isomap,LLE 和 variants等資料降維和視覺化方法,更適合展開單個連續的低維的manifold。但如果要準確的視覺化樣本間的相似度關係,t-SNE表現更好。因為t-SNE主要是關注資料的區域性結構。
Yellowbrick對資料的視覺化有更加高階的封裝和實現,對於新手和有一定經驗的分析人員來說都是非常友好的,這裡強烈推薦入門這款神器,一篇文章的內容有限不足以講清楚整個模組,感興趣的話可以閱讀我的系列文章。
很高興在自己溫習回顧知識的同時能寫下點分享的東西出來,如果說您覺得我的內容還可以或者是對您有所啟發、幫助,還希望得到您的鼓勵支援!
喜歡文章,點個在看
相關文章
- 【神器】視覺化建立骨架屏視覺化
- 推薦一款Python資料視覺化神器Python視覺化
- 視覺化執行Python的神器Jupyter Notebook視覺化Python
- Python——視覺化神器pyecharts的正確開啟方式Python視覺化Echarts
- 【Python視覺化】使用Pyecharts進行奧運會視覺化分析~Python視覺化Echarts
- 推薦一個 Nginx 視覺化配置神器Nginx視覺化
- 使用 Python 進行資料視覺化Python視覺化
- 如何使用Python 進行資料視覺化Python視覺化
- Python視覺化:Seaborn(二)Python視覺化
- Python視覺化:Seaborn(一)Python視覺化
- PyCon2018:兩款最新ML資料視覺化庫:Altair和Yellowbrick視覺化AI
- Python繪圖與視覺化Python繪圖視覺化
- python 資料視覺化利器Python視覺化
- python資料視覺化——echartsPython視覺化Echarts
- Python視覺化-氣泡圖Python視覺化
- Python視覺化-折線圖Python視覺化
- Python視覺化-地圖染色Python視覺化地圖
- 使用Python視覺化Word2vec的結果Python視覺化
- 資料視覺化神器,深入解讀Smartbi自助儀表盤視覺化
- Python資料視覺化---pygal模組Python視覺化
- Python視覺化(1):折線圖Python視覺化
- PYTHON視覺化:瞭解資料Python視覺化
- 視覺化視覺化
- Docker使用Portainer搭建視覺化介面DockerAI視覺化
- Python資料視覺化matplotlib庫Python視覺化
- Python 如何實現資料視覺化Python視覺化
- Python 招聘資訊爬取及視覺化Python視覺化
- python實現地址分佈視覺化Python視覺化
- 3D視覺化|疫情態勢視覺化3D視覺化
- PHP 後臺開發神器,通過視覺化配置生成CURD頁面PHP視覺化
- 使用 Apache Superset 視覺化 ClickHouse 資料Apache視覺化
- 如何使用Android視覺化埋點Android視覺化
- 視覺化portainer視覺化AI
- 使用memadmin視覺化監視我們的memcache視覺化
- 資料視覺化基本原理——視覺化模型視覺化模型
- CNN視覺化技術總結(三)--類視覺化CNN視覺化
- 資料視覺化與資訊視覺化怎麼搞?視覺化
- 最新Python爬蟲和資料視覺化Python爬蟲視覺化