import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from collections import counter
iris = load_iris(
)df = pd.dataframe(iris.data, columns=iris.feature_names)
df['label'
]= iris.target
df.columns =
['sepal length'
,'sepal width'
,'petal lenght'
,'petal width'
,'label'
]
# 繪畫出不同類別的鳶尾花的花萼寬度
-1]# 劃分訓練集與測試集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=
0.2)
class
knn:
def__init__
(self, x_train, y_train, neighbors=
3, p=2)
:'''
neighbors 臨近點的個數
p=2 採用歐氏距離
'''self.n = neighbors
self.p = p
self.x_train = x_train
self.y_train = y_train
defpredict
(self, x)
:# 取出n個點
knn_list =
for i in
range
(self.n)
: dist = np.linalg.norm(x - self.x_train[i]
,ord
=self.p)
# knn_list儲存距離和類別值
(dist, self.y_train[i]))
for i in
range
(self.n,
len(self.x_train)):
# 取出最大的距離對應的index
max_index = knn_list.index(
max(knn_list, key=
lambda x:x[0]
))dist = np.linalg.norm(x - self.x_train[i]
,ord
=self.p)
# 如果最大的值大於當前距離,則將當前距離置於knn_list中
if knn_list[max_index][0
]> dist:
knn_list[max_index]=(
(dist, self.y_train[i]))
#統計# 取出最後一列值(類別值)
knn =
[k[-1]
for k in knn_list]
count_pairs = counter(knn)
# 以類別數最多的作為被分類的類別
k 近鄰演算法
此文章參考機器學習實戰一書,具體的理論知識可以參考該書。本文的初衷只是為了做乙個複習,將學過的知識加以整理,其中不免有一定的錯誤。2.k 近鄰演算法的原理介紹 k 近鄰演算法通過測量不同的特徵值之間的距離進行分類。它的工作原理如下 存在乙個樣本的資料集合,也成為訓練樣本集合。並且樣本集中的每個資料都...
K 近鄰演算法
k 近鄰演算法採用測量不同特徵值之間的距離方法進行分類。優點 精度高 對異常值不敏感 無資料輸入假定 缺點 計算複雜度高 空間複雜度高 適用資料範圍 數值型和標稱型 工作原理 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入...
K 近鄰演算法
首先,我們將 k 近鄰演算法的基本理論 其次我們將使用python從文字檔案中匯入並解析資料 再次,討論當存在許多資料 的時,如何避免計算距離時可能碰到的一些常見錯誤 最後,利用實際的例子講解如何使用k 近鄰演算法改進約會 1.1 knn演算法 工作原理 存在乙個樣本資料集合,也稱作訓練樣本集,並且...