【机器学习】:如何对你的数据进行分类?
機器學習:如何對你的數據進行分類
- 🌸個人主頁:JoJo的數據分析歷險記
- 📝個人介紹:統計學top3研究生
- 💌如果文章對你有幫助,歡迎?關注、👍點贊、?收藏、👍訂閱專欄
機器學習:如何對你的數據進行分類
引言
如果我們希望使用機器學習來解決需要預測分類結果的業務問題,我們可以使用以下分類算法。
分類算法是用于預測輸入數據屬于哪個類別的機器學習方法。是一種監督的學習任務,這意味著它們需要帶有標記的訓練樣本。
使用情景
-
根據癥狀、實驗室結果和歷史診斷預測臨床診斷
-
使用索賠金額、藥物傾向、疾病和提供者等數據預測醫療保健索賠是否具有欺詐性
常見的分類算法:
以下是用于預測分類結果的最常用算法的介紹:支持向量機、樸素貝葉斯、邏輯回歸、決策樹和神經網絡 我們將探討各個算法的基本概念和優缺點
支持向量機
如果在 n 維空間(其中 n 是特征的數量)中繪制數據,支持向量機 (SVM) 會嘗試擬合最能區分類別的超平面。當你有一個新的數據點時,它相對于超平面的位置將預測該點屬于哪個類別。
優點
- 精確度高
- 可以處理線性不可分問題(結合核方法)
- 適合高維空間(許多特征)
缺點
- 解釋性較差
- 在大數據集上訓練是比較慢的
- 占用內存較大
樸素貝葉斯
樸素貝葉斯假設所有特征都是獨立的,它們獨立地貢獻于目標變量類別的概率;這并不總是正確的,這就是為什么它被稱為“樸素”。概率和似然值是根據它們在數據中出現的頻率以及使用貝葉斯定理的公式計算的最終概率來計算的。
優點:
- 非常簡單并且好解釋
- 計算很快
- 適合處理高緯空間
缺點:
-
如果變量之間存在顯著依賴性(即不滿足獨立性 ,現實中往往很難滿足),則其效果會受到影響
-
如果一個出現在測試數據中的類沒有出現在訓練數據中,它的概率為零。對數據有一定的要求
logistic回歸
邏輯回歸預測二元結果的概率。如果新觀察的概率高于設定的閾值,則預測其在該類中。對于有多個類的場景,有一些方法可以使用邏輯回歸。
優點 :
- 計算速度快,可以使用新數據輕松更新
- 輸出可以解釋為概率;這可以用于排名
- 可以使用正則化技術防止過擬合
缺點 :
- 難以捕捉非線性關系
- 不能學習復雜的關系
決策樹和集成方法
決策樹學習如何最好地(信息增益最大)將數據集拆分為單獨的分支,使其能夠學習非線性關系。
隨機森林 (RF) 和梯度提升樹 (GBT) 是兩種樹算法,它們構建許多單獨的樹,匯集它們的預測。當他們使用融合的結果來做出最終決定時,被稱為“集成模型”(Ensembel model)。
優點:
- 單個樹很容易訓練
- 集成模型對噪聲和缺失值具有魯棒性
- 隨機森林“out-of-the-box”
缺點:
- 單個決策樹容易過度擬合(這就是集成方法的用武之地!)
- 復雜的樹很難解釋
神經網絡
神經網絡可以使用對數據進行數學轉換的神經元層來學習復雜的模式。輸入和輸出之間的層稱為“隱藏層”。神經網絡可以學習其他算法無法輕易發現的特征之間的關系。所以我覺得神經網絡最主要的就是在做特征提取
優點:
- 非常強大/最先進的許多領域(例如計算機視覺、自然語言處理等)
- 可以學習非常復雜的關系
- 隱藏層減少了對特征工程的需求(減少了對底層數據理解難度)
缺點:
- 需要很多數據
- 容易過擬合(可以使用一些正則化方法)
- 訓練時間較長
- 大型數據集需要強大的計算能力(太貴了,計算成本高)
- 模型是一個“黑箱”,無法解釋,沒有太多的理論
接下來我們來看看如何通過sklearn實現上述各種分類方法
代碼實現:
1.數據介紹
簡單演示如何使用 scikit-learn 構建常見的分類器。使用 178 種葡萄酒及其各種屬性的數據集。數據中有三種不同的葡萄酒類別,目標是根據屬性預測葡萄酒類別。數據取自 UCI 機器學習存儲庫,可在https://archive.ics.uci.edu/ml/datasets/Wine找到。
因為原始數據沒有標題。第一列是我們希望預測的類,其余的屬性我們將用作特征:
數據導入
import pandas as pd import numpy as np我們讀入我們保存的數據,傳遞列名
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"])讓我們看看前幾行數據
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.訓練集和測試集
拆分數據的目的是能夠評估預測模型在用于看不見的數據時的質量。訓練時,我們將嘗試構建一個盡可能接近數據的模型,以便能夠最準確地做出預測。但是,如果沒有測試集,我們將面臨過度擬合的風險——該模型對于它所看到的數據非常有效,但不適用于新數據。
分割比率經常被爭論,在實踐中可能會將的數據分成三組:訓練、驗證和測試。將使用訓練數據來了解希望使用哪個分類器;在調整參數的同時進行測試的驗證集和測試集,以了解最終模型在實踐中的工作方式。此外,還有一些技術,如 K-Fold 交叉驗證,也有助于減少偏差。
出于演示目的,我們只會將數據隨機分成測試和訓練,分成 80/20。
3.標準化處理
所有特征都是數字型的,因此我們無需擔心使用 one-hot 編碼等技術轉換分類數據。但是,我們將演示如何將我們的數據標準化。標準化重新調整了我們的屬性,因此它們的平均值為0,標準差為 1。假設分布是高斯分布(如果是,則效果更好),或者可以使用歸一化在 0 和 1 的范圍之間重新調整
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() train_scaled = scaler.fit_transform(X_train) test_scaled = scaler.transform(X_test)4.支持向量機
如果您在 n 維空間(其中 n 是特征的數量)中繪制數據,支持向量機 (SVM) 會嘗試擬合最能區分類別的超平面。當你有一個新的數據點時,它相對于超平面的位置將預測該點屬于哪個類別。
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.決策樹和隨機森林
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.神經網絡
from sklearn.neural_network import MLPClassifier model3 = MLPClassifier() model3.fit(train_scaled, y_train) MLPClassifier()9.模型評估
from sklearn.metrics import accuracy_score# 訓練集精確度 print('SVM訓練集精度:',accuracy_score(y_train, model1.predict(train_scaled))) print('樸素貝葉斯訓練集精度:' ,accuracy_score(y_train, model2.predict(train_scaled))) print('logistic回歸訓練集精度:' ,accuracy_score(y_train, modelog.predict(train_scaled))) print("決策樹訓練集精度",accuracy_score(y_train, tree_model.predict(train_scaled))) print("隨機森林訓練集精度",accuracy_score(y_train, rf_model.predict(train_scaled))) print('MLP訓練集精度',accuracy_score(y_train, model3.predict(train_scaled))) SVM訓練集精度: 1.0 樸素貝葉斯訓練集精度: 0.9788732394366197 logistic回歸訓練集精度: 1.0 決策樹訓練集精度 1.0 隨機森林訓練集精度 1.0 MLP訓練集精度 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("隨機森林測試集精度",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 隨機森林測試集精度 1.0 MLP測試集精度 0.9722222222222222總結
在紅酒數據集上各個分類器的結果都不錯,在具體項目中,大家可能需要使用一些更complex的模型。???如果文章對你有幫助,一鍵三連吧,謝謝各位的支持!
總結
以上是生活随笔為你收集整理的【机器学习】:如何对你的数据进行分类?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java递归 杨辉三角_java杨辉三
- 下一篇: python学习笔记|SQLite数据库