什么是KNN算法,KNN算法主要的的應(yīng)用場景是什么?
KNN算法(K-Nearest Neighbor Algorithm)是一種基本的機器學(xué)習(xí)算法,它可以用于分類和回歸任務(wù)。
在KNN算法中,給定一個新的輸入樣本,通過計算其與已知數(shù)據(jù)集中每個樣本之間的距離,找到與其最相似的K個樣本,然后通過這K個樣本的分類信息(對于分類問題)或者平均值(對于回歸問題)來預(yù)測該輸入樣本的分類或者數(shù)值。
KNN算法的主要優(yōu)點是簡單易用、適用于多分類問題、適用于非線性分類問題等。然而,它的主要缺點是計算復(fù)雜度高,特別是當(dāng)數(shù)據(jù)集很大時,計算距離需要較多的時間和計算資源。
KNN算法的應(yīng)用場景包括圖像識別、語音識別、文本分類、推薦系統(tǒng)等。例如,KNN算法可以用于圖像分類問題,其中每個圖像可以看作是一個輸入樣本,它的特征可以表示為圖像的像素值。通過計算每個圖像與已知的訓(xùn)練集中的圖像之間的距離,可以找到與其最相似的K個圖像,然后通過這K個圖像的分類信息來預(yù)測該圖像的分類。
什么是KNN(K近鄰算法)?【知多少】_嗶哩嗶哩_bilibili
KNN和上次使用的線性回歸有哪些不同??
KNN和線性回歸是兩種不同的機器學(xué)習(xí)算法,它們在模型的構(gòu)建和使用方法上有很大的差異:
模型類型:KNN是一種非參數(shù)模型,而線性回歸是一種參數(shù)模型。
模型目標(biāo):KNN旨在通過尋找最近鄰的樣本來進行分類或回歸預(yù)測,而線性回歸旨在建立輸入特征和目標(biāo)變量之間的線性關(guān)系。
數(shù)據(jù)要求:KNN對數(shù)據(jù)的要求比較寬松,只需要樣本具有可比性;而線性回歸則要求樣本符合線性關(guān)系。
計算方法:KNN算法需要計算新樣本與每個訓(xùn)練樣本之間的距離,然后找到最近的K個樣本,對這K個樣本進行加權(quán)求和或者多數(shù)表決來進行預(yù)測;而線性回歸則是通過最小化目標(biāo)變量與預(yù)測變量之間的誤差平方和,來計算出回歸系數(shù)和截距。
適用范圍:KNN適用于多分類問題和非線性問題,如圖像識別、文本分類等;而線性回歸適用于連續(xù)數(shù)值預(yù)測問題,如房價預(yù)測、銷售額預(yù)測等。
總之,KNN和線性回歸是兩種不同的機器學(xué)習(xí)算法,它們各有優(yōu)缺點,適用于不同的場景和問題。在選擇合適的算法時,需要考慮數(shù)據(jù)特征、模型要求和業(yè)務(wù)需求等多個因素。
利用KNN算法對橘子進行分類,Python代碼實現(xiàn)
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
# 定義訓(xùn)練數(shù)據(jù)
X_train = np.array([[1.2, 3.5], [1.4, 3.2], [1.3, 3.6], [1.5, 3.9], [1.7, 3.6], [1.8, 3.2]])
y_train = np.array(['Orange', 'Orange', 'Orange', 'Orange', 'Orange', 'Orange'])
# 定義測試數(shù)據(jù)
X_test = np.array([[1.6, 3.4], [1.5, 3.5], [1.3, 3.3], [1.2, 3.7], [1.7, 3.4]])
# 定義KNN分類器
knn = KNeighborsClassifier(n_neighbors=3)
# 擬合數(shù)據(jù)
knn.fit(X_train, y_train)
# 預(yù)測測試數(shù)據(jù)
y_pred = knn.predict(X_test)
# 打印預(yù)測結(jié)果
print(y_pred)
在這個例子中,我們首先定義了一些訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)。訓(xùn)練數(shù)據(jù)包括6個橘子的特征(重量和直徑),以及它們的分類標(biāo)簽(橘子)。測試數(shù)據(jù)包括5個橘子的特征,我們要使用KNN算法對這些橘子進行分類。
然后,我們定義了一個KNN分類器,并使用訓(xùn)練數(shù)據(jù)來擬合它。接著,我們使用KNN分類器對測試數(shù)據(jù)進行預(yù)測,并打印預(yù)測結(jié)果。在這個例子中,我們假設(shè)K值為3,也就是說,我們要找到距離測試數(shù)據(jù)最近的3個訓(xùn)練數(shù)據(jù),并通過它們的分類標(biāo)簽來預(yù)測測試數(shù)據(jù)的分類。
請注意,這只是一個簡單的示例,實際上,我們需要更多的訓(xùn)練數(shù)據(jù)和更多的特征來訓(xùn)練一個更準(zhǔn)確的KNN分類器。
當(dāng)然這個數(shù)據(jù)是寫死的,當(dāng)然我們從外界讀取文件,我們只需要導(dǎo)入一個pandas庫,然后引入讀取即可
data = pd.read_csv('路徑文件名',encoding='gbk')
?優(yōu)化一下
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
def main():
# 定義訓(xùn)練數(shù)據(jù)
X_train = np.array([[1.2, 3.5], [1.4, 3.2], [1.3, 3.6], [1.5, 3.9], [1.7, 3.6], [1.8, 3.2]])
y_train = np.array(['Orange', 'Orange', 'Orange', 'Orange', 'Orange', 'Orange'])
# 定義測試數(shù)據(jù)
X_test = np.array([[1.6, 3.4], [1.5, 3.5], [1.3, 3.3], [1.2, 3.7], [1.7, 3.4]])
# 定義KNN分類器
knn = KNeighborsClassifier(n_neighbors=3)
# 擬合數(shù)據(jù)
knn.fit(X_train, y_train)
# 預(yù)測測試數(shù)據(jù)
y_pred = knn.predict(X_test)
# 打印預(yù)測結(jié)果
print(y_pred)
if __name__ == "__main__":
main()
這樣,我們就使代碼更加緊湊和易讀,并使用了函數(shù)將重復(fù)代碼封裝為一個函數(shù),從而避免了重復(fù)輸入。
再優(yōu)化,用圖表來展示
# 請參照實驗思路完成實訓(xùn)內(nèi)容
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt
def main():
# 定義訓(xùn)練數(shù)據(jù)
X_train = np.array([[1.2, 3.5], [1.4, 3.2], [1.3, 3.6], [1.5, 3.9], [1.7, 3.6], [1.8, 3.2]])
y_train = np.array(['Orange', 'Orange', 'Orange', 'Orange', 'Orange', 'Orange'])
# 定義測試數(shù)據(jù)
X_test = np.array([[1.6, 3.4], [1.5, 3.5], [1.3, 3.3], [1.2, 3.7], [1.7, 3.4]])
# 定義KNN分類器
knn = KNeighborsClassifier(n_neighbors=3)
# 擬合數(shù)據(jù)
knn.fit(X_train, y_train)
# 預(yù)測測試數(shù)據(jù)
y_pred = knn.predict(X_test)
# 打印預(yù)測結(jié)果
print(y_pred)
fig, ax = plt.subplots()
colors = {'Orange': 'red', 'Blue': 'blue'}
for i in range(len(X_test)):
ax.scatter(X_test[i][0], X_test[i][1], c=colors[y_pred[i]], label=y_pred[i])
ax.legend()
plt.show()
if __name__ == "__main__":
main()
這將創(chuàng)建一個新的窗口顯示散點圖。每個測試數(shù)據(jù)點都用一個點表示,并根據(jù)它們的預(yù)測類別用不同的顏色標(biāo)記。文章來源:http://www.zghlxwxcb.cn/news/detail-500568.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-500568.html
到了這里,關(guān)于KNN算法及應(yīng)用場景的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!