【机器学习】:如何对你的数据进行分类?
機(jī)器學(xué)習(xí):如何對你的數(shù)據(jù)進(jìn)行分類
- 🌸個(gè)人主頁:JoJo的數(shù)據(jù)分析歷險(xiǎn)記
- 📝個(gè)人介紹:統(tǒng)計(jì)學(xué)top3研究生
- 💌如果文章對你有幫助,歡迎?關(guān)注、👍點(diǎn)贊、?收藏、👍訂閱專欄
機(jī)器學(xué)習(xí):如何對你的數(shù)據(jù)進(jìn)行分類
引言
如果我們希望使用機(jī)器學(xué)習(xí)來解決需要預(yù)測分類結(jié)果的業(yè)務(wù)問題,我們可以使用以下分類算法。
分類算法是用于預(yù)測輸入數(shù)據(jù)屬于哪個(gè)類別的機(jī)器學(xué)習(xí)方法。是一種監(jiān)督的學(xué)習(xí)任務(wù),這意味著它們需要帶有標(biāo)記的訓(xùn)練樣本。
使用情景
-
根據(jù)癥狀、實(shí)驗(yàn)室結(jié)果和歷史診斷預(yù)測臨床診斷
-
使用索賠金額、藥物傾向、疾病和提供者等數(shù)據(jù)預(yù)測醫(yī)療保健索賠是否具有欺詐性
常見的分類算法:
以下是用于預(yù)測分類結(jié)果的最常用算法的介紹:支持向量機(jī)、樸素貝葉斯、邏輯回歸、決策樹和神經(jīng)網(wǎng)絡(luò) 我們將探討各個(gè)算法的基本概念和優(yōu)缺點(diǎn)
支持向量機(jī)
如果在 n 維空間(其中 n 是特征的數(shù)量)中繪制數(shù)據(jù),支持向量機(jī) (SVM) 會嘗試擬合最能區(qū)分類別的超平面。當(dāng)你有一個(gè)新的數(shù)據(jù)點(diǎn)時(shí),它相對于超平面的位置將預(yù)測該點(diǎn)屬于哪個(gè)類別。
優(yōu)點(diǎn)
- 精確度高
- 可以處理線性不可分問題(結(jié)合核方法)
- 適合高維空間(許多特征)
缺點(diǎn)
- 解釋性較差
- 在大數(shù)據(jù)集上訓(xùn)練是比較慢的
- 占用內(nèi)存較大
樸素貝葉斯
樸素貝葉斯假設(shè)所有特征都是獨(dú)立的,它們獨(dú)立地貢獻(xiàn)于目標(biāo)變量類別的概率;這并不總是正確的,這就是為什么它被稱為“樸素”。概率和似然值是根據(jù)它們在數(shù)據(jù)中出現(xiàn)的頻率以及使用貝葉斯定理的公式計(jì)算的最終概率來計(jì)算的。
優(yōu)點(diǎn):
- 非常簡單并且好解釋
- 計(jì)算很快
- 適合處理高緯空間
缺點(diǎn):
-
如果變量之間存在顯著依賴性(即不滿足獨(dú)立性 ,現(xiàn)實(shí)中往往很難滿足),則其效果會受到影響
-
如果一個(gè)出現(xiàn)在測試數(shù)據(jù)中的類沒有出現(xiàn)在訓(xùn)練數(shù)據(jù)中,它的概率為零。對數(shù)據(jù)有一定的要求
logistic回歸
邏輯回歸預(yù)測二元結(jié)果的概率。如果新觀察的概率高于設(shè)定的閾值,則預(yù)測其在該類中。對于有多個(gè)類的場景,有一些方法可以使用邏輯回歸。
優(yōu)點(diǎn) :
- 計(jì)算速度快,可以使用新數(shù)據(jù)輕松更新
- 輸出可以解釋為概率;這可以用于排名
- 可以使用正則化技術(shù)防止過擬合
缺點(diǎn) :
- 難以捕捉非線性關(guān)系
- 不能學(xué)習(xí)復(fù)雜的關(guān)系
決策樹和集成方法
決策樹學(xué)習(xí)如何最好地(信息增益最大)將數(shù)據(jù)集拆分為單獨(dú)的分支,使其能夠?qū)W習(xí)非線性關(guān)系。
隨機(jī)森林 (RF) 和梯度提升樹 (GBT) 是兩種樹算法,它們構(gòu)建許多單獨(dú)的樹,匯集它們的預(yù)測。當(dāng)他們使用融合的結(jié)果來做出最終決定時(shí),被稱為“集成模型”(Ensembel model)。
優(yōu)點(diǎn):
- 單個(gè)樹很容易訓(xùn)練
- 集成模型對噪聲和缺失值具有魯棒性
- 隨機(jī)森林“out-of-the-box”
缺點(diǎn):
- 單個(gè)決策樹容易過度擬合(這就是集成方法的用武之地!)
- 復(fù)雜的樹很難解釋
神經(jīng)網(wǎng)絡(luò)
神經(jīng)網(wǎng)絡(luò)可以使用對數(shù)據(jù)進(jìn)行數(shù)學(xué)轉(zhuǎn)換的神經(jīng)元層來學(xué)習(xí)復(fù)雜的模式。輸入和輸出之間的層稱為“隱藏層”。神經(jīng)網(wǎng)絡(luò)可以學(xué)習(xí)其他算法無法輕易發(fā)現(xiàn)的特征之間的關(guān)系。所以我覺得神經(jīng)網(wǎng)絡(luò)最主要的就是在做特征提取
優(yōu)點(diǎn):
- 非常強(qiáng)大/最先進(jìn)的許多領(lǐng)域(例如計(jì)算機(jī)視覺、自然語言處理等)
- 可以學(xué)習(xí)非常復(fù)雜的關(guān)系
- 隱藏層減少了對特征工程的需求(減少了對底層數(shù)據(jù)理解難度)
缺點(diǎn):
- 需要很多數(shù)據(jù)
- 容易過擬合(可以使用一些正則化方法)
- 訓(xùn)練時(shí)間較長
- 大型數(shù)據(jù)集需要強(qiáng)大的計(jì)算能力(太貴了,計(jì)算成本高)
- 模型是一個(gè)“黑箱”,無法解釋,沒有太多的理論
接下來我們來看看如何通過sklearn實(shí)現(xiàn)上述各種分類方法
代碼實(shí)現(xiàn):
1.數(shù)據(jù)介紹
簡單演示如何使用 scikit-learn 構(gòu)建常見的分類器。使用 178 種葡萄酒及其各種屬性的數(shù)據(jù)集。數(shù)據(jù)中有三種不同的葡萄酒類別,目標(biāo)是根據(jù)屬性預(yù)測葡萄酒類別。數(shù)據(jù)取自 UCI 機(jī)器學(xué)習(xí)存儲庫,可在https://archive.ics.uci.edu/ml/datasets/Wine找到。
因?yàn)樵紨?shù)據(jù)沒有標(biāo)題。第一列是我們希望預(yù)測的類,其余的屬性我們將用作特征:
數(shù)據(jù)導(dǎo)入
import pandas as pd import numpy as np我們讀入我們保存的數(shù)據(jù),傳遞列名
wine = pd.read_csv(r"C:\Users\DELL\AppData\Roaming\Microsoft\Windows\Network Shortcuts\wine.data",names=["class", "alcohol", "malic_acid", "ash", "alcalinity_of_ash", "magnesium", "total_phenols","flavanoids", "nonflavanoid_phenols", "proanthocyanins", "color_intensity", "hue", "od280_od315_of_diluted_wines", "proline"])讓我們看看前幾行數(shù)據(jù)
wine.head()| 1 | 14.23 | 1.71 | 2.43 | 15.6 | 127 | 2.80 | 3.06 | 0.28 | 2.29 | 5.64 | 1.04 | 3.92 | 1065 |
| 1 | 13.20 | 1.78 | 2.14 | 11.2 | 100 | 2.65 | 2.76 | 0.26 | 1.28 | 4.38 | 1.05 | 3.40 | 1050 |
| 1 | 13.16 | 2.36 | 2.67 | 18.6 | 101 | 2.80 | 3.24 | 0.30 | 2.81 | 5.68 | 1.03 | 3.17 | 1185 |
| 1 | 14.37 | 1.95 | 2.50 | 16.8 | 113 | 3.85 | 3.49 | 0.24 | 2.18 | 7.80 | 0.86 | 3.45 | 1480 |
| 1 | 13.24 | 2.59 | 2.87 | 21.0 | 118 | 2.80 | 2.69 | 0.39 | 1.82 | 4.32 | 1.04 | 2.93 | 735 |
2.訓(xùn)練集和測試集
拆分?jǐn)?shù)據(jù)的目的是能夠評估預(yù)測模型在用于看不見的數(shù)據(jù)時(shí)的質(zhì)量。訓(xùn)練時(shí),我們將嘗試構(gòu)建一個(gè)盡可能接近數(shù)據(jù)的模型,以便能夠最準(zhǔn)確地做出預(yù)測。但是,如果沒有測試集,我們將面臨過度擬合的風(fēng)險(xiǎn)——該模型對于它所看到的數(shù)據(jù)非常有效,但不適用于新數(shù)據(jù)。
分割比率經(jīng)常被爭論,在實(shí)踐中可能會將的數(shù)據(jù)分成三組:訓(xùn)練、驗(yàn)證和測試。將使用訓(xùn)練數(shù)據(jù)來了解希望使用哪個(gè)分類器;在調(diào)整參數(shù)的同時(shí)進(jìn)行測試的驗(yàn)證集和測試集,以了解最終模型在實(shí)踐中的工作方式。此外,還有一些技術(shù),如 K-Fold 交叉驗(yàn)證,也有助于減少偏差。
出于演示目的,我們只會將數(shù)據(jù)隨機(jī)分成測試和訓(xùn)練,分成 80/20。
3.標(biāo)準(zhǔn)化處理
所有特征都是數(shù)字型的,因此我們無需擔(dān)心使用 one-hot 編碼等技術(shù)轉(zhuǎn)換分類數(shù)據(jù)。但是,我們將演示如何將我們的數(shù)據(jù)標(biāo)準(zhǔn)化。標(biāo)準(zhǔn)化重新調(diào)整了我們的屬性,因此它們的平均值為0,標(biāo)準(zhǔn)差為 1。假設(shè)分布是高斯分布(如果是,則效果更好),或者可以使用歸一化在 0 和 1 的范圍之間重新調(diào)整
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() train_scaled = scaler.fit_transform(X_train) test_scaled = scaler.transform(X_test)4.支持向量機(jī)
如果您在 n 維空間(其中 n 是特征的數(shù)量)中繪制數(shù)據(jù),支持向量機(jī) (SVM) 會嘗試擬合最能區(qū)分類別的超平面。當(dāng)你有一個(gè)新的數(shù)據(jù)點(diǎn)時(shí),它相對于超平面的位置將預(yù)測該點(diǎn)屬于哪個(gè)類別。
from sklearn import svm model1 = svm.SVC() model1.fit(train_scaled, y_train) SVC()5.樸素貝葉斯
from sklearn.naive_bayes import GaussianNB model2 = GaussianNB() model2.fit(train_scaled, y_train) GaussianNB()6.logistic回歸
from sklearn.linear_model import LogisticRegression modelog = LogisticRegression() modelog.fit(train_scaled,y_train) LogisticRegression()7.決策樹和隨機(jī)森林
from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier tree_model = DecisionTreeClassifier() rf_model = RandomForestClassifier() tree_model.fit(train_scaled, y_train) rf_model.fit(train_scaled, y_train) RandomForestClassifier()8.神經(jīng)網(wǎng)絡(luò)
from sklearn.neural_network import MLPClassifier model3 = MLPClassifier() model3.fit(train_scaled, y_train) MLPClassifier()9.模型評估
from sklearn.metrics import accuracy_score# 訓(xùn)練集精確度 print('SVM訓(xùn)練集精度:',accuracy_score(y_train, model1.predict(train_scaled))) print('樸素貝葉斯訓(xùn)練集精度:' ,accuracy_score(y_train, model2.predict(train_scaled))) print('logistic回歸訓(xùn)練集精度:' ,accuracy_score(y_train, modelog.predict(train_scaled))) print("決策樹訓(xùn)練集精度",accuracy_score(y_train, tree_model.predict(train_scaled))) print("隨機(jī)森林訓(xùn)練集精度",accuracy_score(y_train, rf_model.predict(train_scaled))) print('MLP訓(xùn)練集精度',accuracy_score(y_train, model3.predict(train_scaled))) SVM訓(xùn)練集精度: 1.0 樸素貝葉斯訓(xùn)練集精度: 0.9788732394366197 logistic回歸訓(xùn)練集精度: 1.0 決策樹訓(xùn)練集精度 1.0 隨機(jī)森林訓(xùn)練集精度 1.0 MLP訓(xùn)練集精度 1.0 # 測試集精確度 print('SVM測試集精度:',accuracy_score(y_test, model1.predict(test_scaled))) print('樸素貝葉斯測試集季度:' ,accuracy_score(y_test, model2.predict(test_scaled))) print('logistic回歸測試集精度:' ,accuracy_score(y_test, modelog.predict(test_scaled))) print("決策樹測試集精度",accuracy_score(y_test, tree_model.predict(test_scaled))) print("隨機(jī)森林測試集精度",accuracy_score(y_test, rf_model.predict(test_scaled))) print('MLP測試集精度',accuracy_score(y_test, model3.predict(test_scaled))) SVM測試集精度: 0.9722222222222222 樸素貝葉斯測試集季度: 1.0 logistic回歸測試集精度: 0.9722222222222222 決策樹測試集精度 0.9166666666666666 隨機(jī)森林測試集精度 1.0 MLP測試集精度 0.9722222222222222總結(jié)
在紅酒數(shù)據(jù)集上各個(gè)分類器的結(jié)果都不錯(cuò),在具體項(xiàng)目中,大家可能需要使用一些更c(diǎn)omplex的模型。???如果文章對你有幫助,一鍵三連吧,謝謝各位的支持!
總結(jié)
以上是生活随笔為你收集整理的【机器学习】:如何对你的数据进行分类?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java递归 杨辉三角_java杨辉三
- 下一篇: raid卷的作用_硬盘raid功能是什么