機(jī)器學(xué)習(xí):使用 Python 進(jìn)行分類
假設(shè)你想教孩子區(qū)分蘋果和橙子。有多種方法可以做到這一點(diǎn)。你可以讓孩子觸摸這兩種水果,讓他們熟悉形狀和柔軟度。你還可以向她展示蘋果和橙子的多個(gè)例子,以便他們可以直觀地發(fā)現(xiàn)差異。這個(gè)過程的技術(shù)等價(jià)物被稱為機(jī)器學(xué)習(xí)。
機(jī)器學(xué)習(xí)教計(jì)算機(jī)解決特定問題,并通過經(jīng)驗(yàn)變得更好。這里討論的示例是一個(gè)分類問題,其中機(jī)器被賦予各種標(biāo)記示例,并期望使用它從標(biāo)記樣本中獲得的知識來對未標(biāo)記樣本進(jìn)行標(biāo)記。機(jī)器學(xué)習(xí)問題也可以采用回歸的形式,其中期望根據(jù)已知樣本及其解決方案來預(yù)測給定問題的實(shí)值real-valued解決方案。分類Classification和回歸Regression被廣泛稱為監(jiān)督學(xué)習(xí)supervised learning。機(jī)器學(xué)習(xí)也可以是無監(jiān)督unsupervised的,機(jī)器識別未標(biāo)記數(shù)據(jù)中的模式,并形成具有相似模式的樣本集群。機(jī)器學(xué)習(xí)的另一種形式是強(qiáng)化學(xué)習(xí)reinforcement learning,機(jī)器通過犯錯(cuò)從環(huán)境中學(xué)習(xí)。
分類
分類是根據(jù)從已知點(diǎn)獲得的信息來預(yù)測一組給定點(diǎn)的標(biāo)簽的過程。與一個(gè)數(shù)據(jù)集相關(guān)的類別或標(biāo)簽可以是二元的,也可以是多元的。舉例來說,如果我們必須給與一個(gè)句子相關(guān)的情緒打上標(biāo)簽,我們可以把它標(biāo)記為正面、負(fù)面或中性。另一方面,我們必須預(yù)測一個(gè)水果是蘋果還是橘子的問題將有二元標(biāo)簽。表
1 給出了一個(gè)分類問題的樣本數(shù)據(jù)集。
在該表中,最后一列的值,即貸款批準(zhǔn),預(yù)計(jì)將基于其他變量進(jìn)行預(yù)測。在接下來的部分中,我們將學(xué)習(xí)如何使用 Python 訓(xùn)練和評估分類器。
年齡 | 信用等級 | 工作 | 擁有房產(chǎn) | 貸款批準(zhǔn) |
35 | 好 | 是 | 是 | 是 |
32 | 差 | 是 | 不 | 不 |
22 | 一般 | 不 | 不 | 不 |
42 | 好 | 是 | 不 | 是 |
表 1
訓(xùn)練和評估分類器
為了訓(xùn)練分類器classifier,我們需要一個(gè)包含標(biāo)記示例的數(shù)據(jù)集。盡管本節(jié)不涉及清理數(shù)據(jù)的過程,但建議你在將數(shù)據(jù)集輸入分類器之前閱讀各種數(shù)據(jù)預(yù)處理和清理技術(shù)。為了在 Python 中處理數(shù)據(jù)集,我們將導(dǎo)入 ??pandas?
? 包和數(shù)據(jù)幀DataFrame結(jié)構(gòu)。然后,你可以從多種分類算法中進(jìn)行選擇,例如決策樹decision tree、支持向量分類器support vector classifier、隨機(jī)森林random forest、XG boost、ADA boost 等。我們將看看隨機(jī)森林分類器,它是使用多個(gè)決策樹形成的集成分類器。
from sklearn.ensemble import RandomForestClassifier
from sklearn import metrics
classifier = RandomForestClassifier()
#creating a train-test split with a proportion of 70:30
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
classifier.fit(X_train, y_train) # 在訓(xùn)練集上訓(xùn)練分類器
y_pred = classifier.predict(X_test) # 用未知數(shù)據(jù)評估分類器
print("Accuracy: ", metrics.accuracy_score(y_test, y_pred)) # 用測試計(jì)劃中的實(shí)際值比較準(zhǔn)確率
雖然這個(gè)程序使用準(zhǔn)確性作為性能指標(biāo),但應(yīng)該使用多種指標(biāo)的組合,因?yàn)楫?dāng)測試集不平衡時(shí),準(zhǔn)確性往往會(huì)產(chǎn)生非代表性的結(jié)果。例如,如果模型對每條記錄都給出了相同的預(yù)測,而用于測試模型的數(shù)據(jù)集是不平衡的,即數(shù)據(jù)集中的大多數(shù)記錄與模型預(yù)測的類別相同,我們就會(huì)得到很高的準(zhǔn)確率。
調(diào)整分類器
調(diào)優(yōu)是指修改模型的超參數(shù)hyperparameter值以提高其性能的過程。超參數(shù)是可以改變其值以改進(jìn)算法的學(xué)習(xí)過程的參數(shù)。
以下代碼描述了隨機(jī)搜索超參數(shù)調(diào)整。在此,我們定義了一個(gè)搜索空間,算法將從該搜索空間中選擇不同的值,并選擇產(chǎn)生最佳結(jié)果的那個(gè):
from sklearn.model_selection import RandomizedSearchCV
#define the search space
min_samples_split = [2, 5, 10]
min_samples_leaf = [1, 2, 4]
grid = {‘min_samples_split’ : min_samples_split, ‘min_samples_leaf’ : min_samples_leaf}
classifier = RandomizedSearchCV(classifier, grid, n_iter = 100)
# n_iter 代表從搜索空間提取的樣本數(shù)
# result.best_score 和 result.best_params_ 可以用來獲得模型的最佳性能,以及參數(shù)的最佳值
classifier.fit(X_train, y_train)
投票分類器
你也可以使用多個(gè)分類器和它們的預(yù)測來創(chuàng)建一個(gè)模型,根據(jù)各個(gè)預(yù)測給出一個(gè)預(yù)測。這個(gè)過程(只考慮為每個(gè)預(yù)測投票的分類器的數(shù)量)被稱為硬投票。軟投票是一個(gè)過程,其中每個(gè)分類器產(chǎn)生一個(gè)給定記錄屬于特定類別的概率,而投票分類器產(chǎn)生的預(yù)測是獲得最大概率的類別。
下面給出了一個(gè)創(chuàng)建軟投票分類器的代碼片段:
soft_voting_clf = VotingClassifier(
estimators=[(‘rf’, rf_clf), (‘a(chǎn)da’, ada_clf), (‘xgb’, xgb_clf), (‘et’, et_clf), (‘gb’, gb_clf)],
voting=’soft’)
soft_voting_clf.fit(X_train, y_train)
這篇文章總結(jié)了分類器的使用,調(diào)整分類器和結(jié)合多個(gè)分類器的結(jié)果的過程。請將此作為一個(gè)參考點(diǎn),詳細(xì)探討每個(gè)領(lǐng)域。