溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python中怎么實(shí)現(xiàn)抽樣分類方法

發(fā)布時(shí)間:2021-07-05 16:13:05 來(lái)源:億速云 閱讀:270 作者:Leah 欄目:云計(jì)算

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)python中怎么實(shí)現(xiàn)抽樣分類方法,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

11.1 算法抽查

在實(shí)踐之前你并不知道哪種算法對(duì)你的的數(shù)據(jù)效果最好。 你需要嘗試用不同的算法去實(shí)踐, 然后知道下一步的方向。 這就是我說的算法抽查。

11.2 算法概述

兩種線性算法

  • 邏輯回歸

  • 線性判別分析 非線性機(jī)器學(xué)習(xí)算法

  • K近鄰算法

  • 樸素貝葉斯。

  • 分類和回歸樹 - CART 是決策樹的一種

  • 支持向量機(jī)

11.3 線性機(jī)器學(xué)習(xí)算法

有個(gè)問題, 什么叫線性, 什么叫非線性?

  • 其實(shí)一般的書里面, 并不是這么分類的。 這里可能為了突出線性的重要性。 算法分為線性和非線性。 線性呢, 比如邏輯回歸, LDA。

11.3.1 邏輯回歸

名字里是回歸, 其實(shí)是一種分類方法。

  • 邏輯回歸是一般的線性回歸加了一個(gè)sigmoid函數(shù), 于是取值從整個(gè)實(shí)數(shù)域到了-1 到 +1, 于是二分類就很容易理解了, 大于零一種, 小于零一種。

  • 邏輯回歸要求


    • 假設(shè)高斯分布


    • 數(shù)字的輸入變量


    • 二分類問題:

  • 如果有時(shí)間, 應(yīng)該把重要的機(jī)器學(xué)習(xí)方法再回顧一遍。 主要思想, 實(shí)例。 后面可以搞個(gè)單獨(dú)的系列

# Logistic Regression Classification
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
filename = 'pima-indians-diabetes.data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(filename, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
num_folds = 10
kfold = KFold(n_splits=10, random_state=7)
model = LogisticRegression()
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

# 0.76951469583

11.3.2 線性回歸分析

LDA 是一種統(tǒng)計(jì)技術(shù)對(duì)于二分類和多分類問題。

  • 它也假設(shè)參數(shù)是高斯分布

# LDA Classification
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
filename = 'pima-indians-diabetes.data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(filename, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
num_folds = 10
kfold = KFold(n_splits=10, random_state=7)
model = LinearDiscriminantAnalysis()
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

# 0.773462064252

可以看到其實(shí)scikit learn 給我們做了很多的封裝, 調(diào)用過程都是一樣的, 沒有難度。 最簡(jiǎn)單的就可以調(diào)用然后看效果。

11.4 非線性算法

11.4.1 k比鄰

k比鄰 是一種基于距離的度量。 找到k個(gè)最近的樣本對(duì)一個(gè)新的樣本, 然后取得平均值作為預(yù)測(cè)值。 這里k 的取得就可能有不同的效果。

如下

# KNN Classification
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.neighbors import KNeighborsClassifier
filename = 'pima-indians-diabetes.data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(filename, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
num_folds = 10
kfold = KFold(n_splits=10, random_state=7)
model = KNeighborsClassifier()
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

# 0.726555023923

首先 1) 沒有說明k 是多少, 應(yīng)該有一個(gè)默認(rèn)值, 找api應(yīng)該可以看到。 2) k比鄰應(yīng)該是很耗時(shí)的, 但是今天的實(shí)踐沒有反應(yīng), 原因應(yīng)該是樣本過少。

11.4.2 樸素貝葉斯

樸素貝葉斯是基于貝葉斯理論的一種算法。 它有一個(gè)重要的假設(shè), 就是每個(gè)變量是獨(dú)立分布的, 就是沒有關(guān)聯(lián)。 樸素貝葉斯計(jì)算每種參數(shù)的可能性以及每個(gè)類別的條件概率, 然后來(lái)估計(jì)新的數(shù)據(jù)并綜合計(jì)算。 這樣得到了新樣本的估計(jì)。

  • 假設(shè)也是高斯分布, 就可以用高斯分布的密度函數(shù)

  • 突然想到, 在實(shí)踐中, 是可以PCA 來(lái)得到彼此正交的參數(shù), 然后來(lái)用樸素貝葉斯是否效果更好??

# Gaussian Naive Bayes Classification
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.naive_bayes import GaussianNB
filename = 'pima-indians-diabetes.data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(filename, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
kfold = KFold(n_splits=10, random_state=7)
model = GaussianNB()
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

# 0.75517771702

11.4.3 CART

決策樹有幾種, 比如 CART, C4.5 決策樹呢基本的想法是遍歷所有特征, 對(duì)第一個(gè)特征做分類, 然后在每個(gè)分支根據(jù)第二個(gè)分類, 繼續(xù)。 知道所有的樣本分類相同, 或者特征用完了。

  • 這里有個(gè)問題, 如何選擇第一個(gè)分類,有g(shù)ini法, 最大熵等幾種辦法,選擇合適的特征順序, 構(gòu)建的決策樹效率更高。

  • 它的缺點(diǎn), 然后對(duì)于離異點(diǎn)會(huì)非常敏感, 這個(gè)要小心。

  • 當(dāng)然, 后期的隨機(jī)森林, 以及boosting 等做法很多基于決策樹來(lái)做, 而且起到了很好的分類效果, 這是后話。

# CART Classification
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
filename = 'pima-indians-diabetes.data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(filename, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
kfold = KFold(n_splits=10, random_state=7)
model = DecisionTreeClassifier()
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

# 0.697795625427

11.4.4 支持向量機(jī)

支撐向量機(jī), 我感覺這是基本機(jī)器學(xué)習(xí)算法中最復(fù)雜的一個(gè)。

  • 它的主要思想呢, 就是找到一個(gè)切平面可以來(lái)區(qū)分不同的類別。 - 其實(shí)就是二分類。

  • 那么問題來(lái)了, 如果平面不能分開呢, 可以引申到多個(gè)維度

  • 還有維度如果過高呢, 這里就是核函數(shù)的用武之地了。 它可以來(lái)解決維度過高的問題, 過高的維度, 甚至無(wú)限維對(duì)計(jì)算是不利的。

  • 在上面這個(gè)思想下, SVM 是為了找到距離兩邊的樣本最遠(yuǎn)的線, 或者平面。

  • 對(duì)于奇異點(diǎn), 它又增加了一個(gè)c, 作為容錯(cuò)。

對(duì)于SVM, 基本思路可能不復(fù)雜, 但是推導(dǎo)過程還是不簡(jiǎn)單的。 詳情見jly的博客, 當(dāng)然它是基于幾個(gè)牛人的理解。 后面有機(jī)會(huì)也可以寫以下。

然后對(duì)于實(shí)踐而言, 有幾個(gè)點(diǎn)

  • 核函數(shù)的選擇。 高斯, 還是別的

  • 幾個(gè)參數(shù)的調(diào)優(yōu)。 這個(gè)后面也應(yīng)該又討論。

# SVM Classification
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.svm import SVC
filename = 'pima-indians-diabetes.data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(filename, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
kfold = KFold(n_splits=10, random_state=7)
model = SVC()
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

## 0.651025290499

11.5 小結(jié)

本章學(xué)習(xí)如何用幾種分類算法做抽樣。 下一章是關(guān)于回歸的。

cha 13 如何選擇好的算法

13.1 選擇算法

這個(gè)很容易理解, 拿出來(lái)結(jié)果比較以下即可。 看代碼

# Compare Algorithms
from pandas import read_csv
from matplotlib import pyplot
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
# load dataset
filename = 'pima-indians-diabetes.data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(filename, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
# prepare models
models = []
models.append(('LR', LogisticRegression()))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC()))
# evaluate each model in turn
results = []
names = []
scoring = 'accuracy'
for name, model in models:
    kfold = KFold(n_splits=10, random_state=7)
    cv_results = cross_val_score(model, X, Y, cv=kfold, scoring=scoring)
    results.append(cv_results)
    names.append(name)
    msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
    print(msg)
# boxplot algorithm comparison
fig = pyplot.figure()
fig.suptitle('Algorithm Comparison')
ax = fig.add_subplot(111)
pyplot.boxplot(results)
ax.set_xticklabels(names)
pyplot.show()

result

LR: 0.769515 (0.048411)
LDA: 0.773462 (0.051592)
KNN: 0.726555 (0.061821)
CART: 0.691302 (0.069249)
NB: 0.755178 (0.042766)
SVM: 0.651025 (0.072141)

python中怎么實(shí)現(xiàn)抽樣分類方法

上述就是小編為大家分享的python中怎么實(shí)現(xiàn)抽樣分類方法了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI