KNN算法-鳶尾花種類(lèi)預(yù)測(cè)
K最近鄰(K-Nearest Neighbors,KNN)算法是一種用于模式識(shí)別和分類(lèi)的簡(jiǎn)單但強(qiáng)大的機(jī)器學(xué)習(xí)算法。它的工作原理非常直觀:給定一個(gè)新數(shù)據(jù)點(diǎn),KNN算法會(huì)查找離這個(gè)數(shù)據(jù)點(diǎn)最近的K個(gè)已知數(shù)據(jù)點(diǎn),然后基于這K個(gè)最近鄰數(shù)據(jù)點(diǎn)的類(lèi)別來(lái)決定新數(shù)據(jù)點(diǎn)的類(lèi)別。簡(jiǎn)而言之,KNN算法通過(guò)周?chē)鷶?shù)據(jù)點(diǎn)的多數(shù)投票來(lái)決定新數(shù)據(jù)點(diǎn)所屬的類(lèi)別。KNN常用于分類(lèi)問(wèn)題,如圖像分類(lèi)、文本分類(lèi)、垃圾郵件檢測(cè)等。它也可以用于回歸問(wèn)題,稱(chēng)為K最近鄰回歸(K-Nearest Neighbors Regression),用于預(yù)測(cè)數(shù)值型輸出。
1. 數(shù)據(jù)集介紹
Iris數(shù)據(jù)集是常用的分類(lèi)實(shí)驗(yàn)數(shù)據(jù)集,由Fisher,1936搜集整理。Iris也稱(chēng)為鳶尾花數(shù)據(jù)集,是一類(lèi)多重變量分析的數(shù)據(jù)集。關(guān)于數(shù)據(jù)集的介紹:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-722802.html
- 實(shí)例數(shù)量:150個(gè),三種各有50個(gè)
- 屬性數(shù)量:4個(gè),數(shù)值型,數(shù)值型,幫助預(yù)測(cè)的屬性和類(lèi)
- Attribute Information:
- 萼片長(zhǎng)度,萼片寬度,花瓣長(zhǎng)度,花瓣寬度 cm
- 山鳶尾,變色鳶尾,維吉尼亞鳶尾
以下是代碼、注釋以及輸出:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-722802.html
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# K—近鄰算法
def KNN_demo():
"""
sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')
n_neighbors:int可選,默認(rèn)為5,k_neighbors查詢(xún)默認(rèn)使用的鄰居數(shù)
algorithm:{'auto','ball_tree','kd_tree','brute'},可選用于計(jì)算最近鄰居的算法:‘ball_tree’將會(huì)使用BallTree,'kd_tree'
將會(huì)使用KDTree。'auto'將嘗試根據(jù)傳遞給fit方法的值來(lái)決定最合適的算法。(不同實(shí)現(xiàn)方式影響效率)
:return:
"""
# 獲取數(shù)據(jù)
iris = load_iris()
# 劃分?jǐn)?shù)據(jù)集
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state= 6)
# 特征工程 標(biāo)準(zhǔn)化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# KNN算法預(yù)估器
estimator = KNeighborsClassifier(n_neighbors= 3)
estimator.fit(x_train, y_train)
# 模型評(píng)估
# 方法一:
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比對(duì)真實(shí)值和預(yù)測(cè)值:\n", y_test == y_predict)
# 方法二:
score = estimator.score(x_test, y_test)
print("準(zhǔn)確率為:\n", score)
return None
if __name__ == "__main__":
KNN_demo()
pass
y_predict:
[0 2 0 0 2 1 1 0 2 1 2 1 2 2 1 1 2 1 1 0 0 2 0 0 1 1 1 2 0 1 0 1 0 0 1 2 1
2]
直接比對(duì)真實(shí)值和預(yù)測(cè)值:
[ True True True True True True False True True True True True
True True True False True True True True True True True True
True True True True True True True True True True False True
True True]
準(zhǔn)確率為:
0.9210526315789473
2. KNN優(yōu)缺點(diǎn):
- 優(yōu)點(diǎn):簡(jiǎn)單,易于實(shí)現(xiàn),不需訓(xùn)練
- 缺點(diǎn):懶惰算法,對(duì)測(cè)試樣本分類(lèi)時(shí)計(jì)算量大,內(nèi)存開(kāi)銷(xiāo)大;必須指定K值,K值選擇不當(dāng)則分類(lèi)精度不能保證。
- 使用場(chǎng)景:小數(shù)據(jù)場(chǎng)景,幾千~幾萬(wàn)樣本,具體場(chǎng)景具體業(yè)務(wù)去測(cè)試。
到了這里,關(guān)于【機(jī)器學(xué)習(xí)】KNN算法-鳶尾花種類(lèi)預(yù)測(cè)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!