日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【机器学习】:如何对你的数据进行分类?

發(fā)布時(shí)間:2023/12/31 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【机器学习】:如何对你的数据进行分类? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

機(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ù)測的類,其余的屬性我們將用作特征:

  • 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ù)導(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() classalcoholmalic_acidashalcalinity_of_ashmagnesiumtotal_phenolsflavanoidsnonflavanoid_phenolsproanthocyaninscolor_intensityhueod280_od315_of_diluted_winesproline01234
    114.231.712.4315.61272.803.060.282.295.641.043.921065
    113.201.782.1411.21002.652.760.261.284.381.053.401050
    113.162.362.6718.61012.803.240.302.815.681.033.171185
    114.371.952.5016.81133.853.490.242.187.800.863.451480
    113.242.592.8721.01182.802.690.391.824.321.042.93735

    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

    from sklearn.model_selection import train_test_split # X刪除我們的target X = wine.drop(["class"], axis=1)y = wine['class'] # 數(shù)據(jù)集拆分 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123)

    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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。