丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號(hào)安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
人工智能開發(fā)者 正文
發(fā)私信給AI研習(xí)社
發(fā)送

0

一個(gè)框架解決幾乎所有機(jī)器學(xué)習(xí)問題

本文作者: AI研習(xí)社 2017-05-12 11:35
導(dǎo)語:接下來就去行動(dòng)吧!

雷鋒網(wǎng)按:本文作者楊熹,原文載于作者個(gè)人博客,雷鋒網(wǎng)已獲授權(quán)。

上周一個(gè)叫 Abhishek Thakur 的數(shù)據(jù)科學(xué)家,在他的 Linkedin 發(fā)表了一篇文章 Approaching (Almost) Any Machine Learning Problem,介紹他建立的一個(gè)自動(dòng)的機(jī)器學(xué)習(xí)框架,幾乎可以解決任何機(jī)器學(xué)習(xí)問題,項(xiàng)目很快也會(huì)發(fā)布出來。這篇文章迅速火遍 Kaggle,他參加過100多個(gè)數(shù)據(jù)科學(xué)相關(guān)的競(jìng)賽,積累了很多寶貴的經(jīng)驗(yàn),看他很幽默地說“寫這樣的框架需要很多豐富的經(jīng)驗(yàn),不是每個(gè)人都有這樣的經(jīng)歷,而很多人有寶貴的經(jīng)驗(yàn),但是他們不愿意分享,我呢恰好是又有一些經(jīng)驗(yàn),又愿意分享的人”。當(dāng)然這篇文章也是受到爭(zhēng)議的,很多人覺得并不全面。

我最近也在準(zhǔn)備參加 Kaggle,之前看過幾個(gè)例子,自己也總結(jié)了一個(gè)分析的流程,今天看了這篇文章,里面提到了一些高效的方法,最干貨的是,他做了一個(gè)表格,列出了各個(gè)算法通常需要訓(xùn)練的參數(shù)。

這個(gè)問題很重要,因?yàn)榇蟛糠謺r(shí)間都是通過調(diào)節(jié)參數(shù),訓(xùn)練模型來提高精度。作為一個(gè)初學(xué)者,第一階段,最想知道的問題,就是如何調(diào)節(jié)參數(shù)。因?yàn)榉治龅奶茁泛芎?jiǎn)單,就那么幾步,常用的算法也就那么幾個(gè),以為把算法調(diào)用一下就可以了么,那是肯定不行的。實(shí)際過程中,調(diào)用完算法后,結(jié)果一般都不怎么好,這個(gè)時(shí)候還需要進(jìn)一步分析,哪些參數(shù)可以調(diào)優(yōu),哪些數(shù)據(jù)需要進(jìn)一步處理,還有什么更合適的算法等等問題。

接下來一起來看一下他的框架。

據(jù)說數(shù)據(jù)科學(xué)家 60-70% 的時(shí)間都花在數(shù)據(jù)清洗和應(yīng)用模型算法上面,這個(gè)框架主要針對(duì)算法的應(yīng)用部分。

一個(gè)框架解決幾乎所有機(jī)器學(xué)習(xí)問題


  什么是 Kaggle? 

Kaggle是一個(gè)數(shù)據(jù)科學(xué)競(jìng)賽的平臺(tái),很多公司會(huì)發(fā)布一些接近真實(shí)業(yè)務(wù)的問題,吸引愛好數(shù)據(jù)科學(xué)的人來一起解決,可以通過這些數(shù)據(jù)積累經(jīng)驗(yàn),提高機(jī)器學(xué)習(xí)的水平。

應(yīng)用算法解決 Kaggle 問題,一般有以下幾個(gè)步驟:

第一步:識(shí)別問題

第二步:分離數(shù)據(jù)

第三步:構(gòu)造提取特征

第四步:組合數(shù)據(jù)

第五步:分解

第六步:選擇特征

第七步:選擇算法進(jìn)行訓(xùn)練

當(dāng)然,工欲善其事,必先利其器,要先把工具和包都安好。 
最方便的就是安裝 Anaconda,這里面包含大部分?jǐn)?shù)據(jù)科學(xué)所需要的包,直接引入就可以了,常用的包有: 

- pandas:常用來將數(shù)據(jù)轉(zhuǎn)化成 dataframe 形式進(jìn)行操作 
- scikit-learn:里面有要用到的機(jī)器學(xué)習(xí)算法模型 
- matplotlib:用來畫圖 
- 以及 xgboost,keras,tqdm 等。

  第一步:識(shí)別問題

在這一步先明確這個(gè)問題是分類還是回歸。通過問題和數(shù)據(jù)就可以判斷出來,數(shù)據(jù)由 X 和 label 列構(gòu)成,label 可以一列也可以多列,可以是二進(jìn)制也可以是實(shí)數(shù),當(dāng)它為二進(jìn)制時(shí),問題屬于分類,當(dāng)它為實(shí)數(shù)時(shí),問題屬于回歸。

  第二步:分離數(shù)據(jù)

一個(gè)框架解決幾乎所有機(jī)器學(xué)習(xí)問題

為什么需要將數(shù)據(jù)分成兩部分? 

用 Training Data 來訓(xùn)練模型,用 Validation Data 來檢驗(yàn)這個(gè)模型的表現(xiàn),不然的話,通過各種調(diào)節(jié)參數(shù),模型可以在訓(xùn)練數(shù)據(jù)集上面表現(xiàn)的非常出色,但是這可能會(huì)是過擬合,過擬合就是太依賴現(xiàn)有的數(shù)據(jù)了,擬合的效果特別好,但是只適用于訓(xùn)練集,以致于來一個(gè)新的數(shù)據(jù),就不知道該預(yù)測(cè)成什么了。所以需要有 Validation 來驗(yàn)證一下,看這個(gè)模型是在那里自娛自樂呢,還是真的表現(xiàn)出色。

在 scikit learn 包里就有工具可以幫你做到這些: 

分類問題用 StrtifiedKFold

from sklearn.cross_validation import StratifiedKFold

回歸問題用 KFold

from sklearn.cross_validation import KFold

  第三步:構(gòu)造特征

這個(gè)時(shí)候,需要將數(shù)據(jù)轉(zhuǎn)化成模型需要的形式。數(shù)據(jù)有三種類型:數(shù)字,類別,文字。當(dāng)數(shù)據(jù)是類別的形式時(shí),需要將它的每一類提取出來作為單獨(dú)一列,然后用二進(jìn)制表示每條記錄相應(yīng)的值。例如:

record 1: 性別 女 
record 2:性別 女 
record 3:性別 男

轉(zhuǎn)化之后就是:

??????女 男 
record 1: 1 0 
record 2:1 0 
record 3:0 1

這個(gè)過程 sklearn 也可以幫你做到:

from sklearn.preprocessing import LabelEncoder

或者

from sklearn.preprocessing import OneHotEncoder

  第四步:組合數(shù)據(jù)

處理完 Feature 之后,就將它們組合到一起。 
如果數(shù)據(jù)是稠密的,就可以用 numpy 的 hstack:

import numpy as np
X = np.hstack((x1, x2, ...))

如果是稀疏的,就用 sparse 的 hstack:

from scipy import sparse
X = sparse.hstack((x1, x2, ...))

組合之后,就可以應(yīng)用以下算法模型: 

- RandomForestClassifier 
- RandomForestRegressor 
- ExtraTreesClassifier 
- ExtraTreesRegressor 
- XGBClassifier 
- XGBRegressor

但是不能應(yīng)用線性模型,線性模型之前需要對(duì)數(shù)據(jù)進(jìn)行正則化而不是上述預(yù)處理。

  第五步:分解

這一步是為了進(jìn)一步優(yōu)化模型,可以用以下方法:

一個(gè)框架解決幾乎所有機(jī)器學(xué)習(xí)問題

PCA:Principal components analysis,主成分分析,是一種分析、簡(jiǎn)化數(shù)據(jù)集的技術(shù)。用于減少數(shù)據(jù)集的維數(shù),同時(shí)保持?jǐn)?shù)據(jù)集中的對(duì)方差貢獻(xiàn)最大的特征。

from sklearn.decomposition import PCA

對(duì)于文字?jǐn)?shù)據(jù),在轉(zhuǎn)化成稀疏矩陣之后,可以用 SVD

from sklearn.decomposition import TruncatedSVD

SVD:Singular Value Decomposition,奇異值分解,是線性代數(shù)中一種重要的矩陣分解,它總能找到標(biāo)準(zhǔn)化正交基后方差最大的維度,因此用它進(jìn)行降維去噪。

  第六步:選擇特征

當(dāng)特征個(gè)數(shù)越多時(shí),分析特征、訓(xùn)練模型所需的時(shí)間就越長(zhǎng),容易引起“維度災(zāi)難”,模型也會(huì)越復(fù)雜,推廣能力也會(huì)下降,所以需要剔除不相關(guān)或亢余的特征。

常用的算法有完全搜索,啟發(fā)式搜索,和隨機(jī)算法。

例如,Random Forest:

from sklearn.ensemble import RandomForestClassifier

或者 xgboost:

import xgboost as xgb

對(duì)于稀疏的數(shù)據(jù),一個(gè)比較有名的方法是 chi-2:

from sklearn.feature_selection import SelectKBest

from sklearn.feature_selection import chi2

  第七步:選擇算法進(jìn)行訓(xùn)練

選擇完最相關(guān)的參數(shù)之后,接下來就可以應(yīng)用算法,常用的算法有:

Classification: 
Random Forest 
GBM 
Logistic Regression 
Naive Bayes 
Support Vector Machines 
k-Nearest Neighbors


Regression 
Random Forest 
GBM 
Linear Regression 
Ridge 
Lasso 
SVR

scikit-learn 里可以看到分類和回歸的可用的算法一覽,包括它們的原理和例子代碼。

在應(yīng)用各算法之前先要明確這個(gè)方法到底是否合適。 

為什么那么多算法里,只提出這幾個(gè)算法呢,這就需要對(duì)比不同算法的性能了。 

這篇神文 Do we Need Hundreds of Classifiers to Solve Real World Classification Problems 測(cè)試了179種分類模型在UCI所有的121個(gè)數(shù)據(jù)上的性能,發(fā)現(xiàn)Random Forests 和 SVM 性能最好。 

我們可以學(xué)習(xí)一下里面的調(diào)研思路,看看是怎么樣得到比較結(jié)果的,在我們的實(shí)踐中也有一定的指導(dǎo)作用。

一個(gè)框架解決幾乎所有機(jī)器學(xué)習(xí)問題

但是直接應(yīng)用算法后,一般精度都不是很理想,這個(gè)時(shí)候需要調(diào)節(jié)參數(shù),最干貨的問題來了,什么模型需要調(diào)節(jié)什么參數(shù)呢?

一個(gè)框架解決幾乎所有機(jī)器學(xué)習(xí)問題

雖然在sklearn的文檔里,會(huì)列出所有算法所帶有的參數(shù),但是里面并不會(huì)說調(diào)節(jié)哪個(gè)會(huì)有效。在一些mooc課程里,有一些項(xiàng)目的代碼,里面可以看到一些算法應(yīng)用時(shí),他們重點(diǎn)調(diào)節(jié)的參數(shù),但是有的也不會(huì)說清楚為什么不調(diào)節(jié)別的。這里作者根據(jù)他100多次比賽的經(jīng)驗(yàn),列出了這個(gè)表,我覺得可以借鑒一下,當(dāng)然,如果有時(shí)間的話,去對(duì)照文檔里的參數(shù)列表,再查一下算法的原理,通過理論也是可以判斷出來哪個(gè)參數(shù)影響比較大的。

調(diào)參之后,也并不就是大功告成,這個(gè)時(shí)候還是需要去思考,是什么原因造成精度低的,是哪些數(shù)據(jù)的深意還沒有被挖掘到,這個(gè)時(shí)候需要用統(tǒng)計(jì)和可視化去再一次探索數(shù)據(jù),之后就再走一遍上面的過程。

我覺得這里還提到了很有用的一條經(jīng)驗(yàn)是,把所有的 transformer 都保存起來,方便在 validation 數(shù)據(jù)集上面應(yīng)用:

一個(gè)框架解決幾乎所有機(jī)器學(xué)習(xí)問題

文章里介紹了分析問題的思路,還提到了幾條很實(shí)用的經(jīng)驗(yàn),不過經(jīng)驗(yàn)終究是別人的經(jīng)驗(yàn),只能借鑒,要想提高自己的水平,還是要看到作者背后的事情,就是參加了100多次實(shí)戰(zhàn),接下來就去行動(dòng)吧,享受用算法和代碼與數(shù)據(jù)玩耍的興奮吧。

  TensorFlow & 神經(jīng)網(wǎng)絡(luò)算法高級(jí)應(yīng)用班” 要開課啦!

從初級(jí)到高級(jí),理論 + 實(shí)戰(zhàn),一站式深度了解 TensorFlow!

本課程面向深度學(xué)習(xí)開發(fā)者,講授如何利用 TensorFlow 解決圖像識(shí)別、文本分析等具體問題。課程跨度為 10 周,將從 TensorFlow 的原理與基礎(chǔ)實(shí)戰(zhàn)技巧開始,一步步教授學(xué)員如何在 TensorFlow 上搭建 CNN、自編碼、RNN、GAN 等模型,并最終掌握一整套基于 TensorFlow 做深度學(xué)習(xí)開發(fā)的專業(yè)技能。

兩名授課老師佟達(dá)、白發(fā)川身為 ThoughtWorks 的資深技術(shù)專家,具有豐富的大數(shù)據(jù)平臺(tái)搭建、深度學(xué)習(xí)系統(tǒng)開發(fā)項(xiàng)目經(jīng)驗(yàn)。

時(shí)間:每周二、四晚 20:00-21:00

開課時(shí)長(zhǎng):總學(xué)時(shí) 20 小時(shí),分 10 周完成,每周 2 次,每次 1 小時(shí)

線上授課地址:http://www.mooc.ai/

雷鋒網(wǎng)相關(guān)閱讀:

一個(gè)實(shí)例告訴你:Kaggle 數(shù)據(jù)競(jìng)賽都有哪些套路

從 Kaggle 困局,看國(guó)內(nèi)數(shù)據(jù)競(jìng)賽平臺(tái)如何突圍

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

一個(gè)框架解決幾乎所有機(jī)器學(xué)習(xí)問題

分享:
相關(guān)文章

編輯

聚焦數(shù)據(jù)科學(xué),連接 AI 開發(fā)者。更多精彩內(nèi)容,請(qǐng)?jiān)L問:yanxishe.com
當(dāng)月熱門文章
最新文章
請(qǐng)?zhí)顚懮暾?qǐng)人資料
姓名
電話
郵箱
微信號(hào)
作品鏈接
個(gè)人簡(jiǎn)介
為了您的賬戶安全,請(qǐng)驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請(qǐng)驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號(hào)信息
您的賬號(hào)已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說