題目:
用原生python **實現knn分類,採用鳶尾花資料集。
knn演算法
knn演算法的核心思想是如果乙個樣 本在特徵空間中的k個最相鄰的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別,並具有這個類別上樣本的特性。該方法在確定分類決策上只依據最鄰近的乙個或者幾個樣本的類別來決定待分樣本所屬的類別
思路:處理資料:從csv中讀取資料,並把它們分割成訓練資料集和測試資料集。(之前用的csv,後來直接導包使用了sklearn.datasets獲取了鳶尾花資料集)
相似度:計算兩個資料例項之間的距離。(我們可以直接使用歐式距離來測量。歐式距離就是兩列數中對應數做差的平方和,之後再開方。)
臨近:確定最相近的n個例項。
結果:從這些實力中生成**結果。
準確度:總結**的準確度。(乙個簡單的評估方法是,計算在測試資料集中演算法正確**的比例,這個比例叫分類準確度)
主程式:把這些串起來
流程圖
**;
"""
import csv #用於處理csv檔案
import random #用於隨機數
import math
import operator #
import matplotlib.pyplot as plt
from decimal import decimal
from sklearn import neighbors
from sklearn.datasets import load_iris
import sklearn
#載入資料集
def loaddataset(filename,split,trainingset=,testset = ):
with open(filename,"r") as csvfile:
lines = csv.reader(csvfile)
dataset = list(lines)
for x in range(len(dataset)-1):
for y in range(4):
dataset[x][y] = float(dataset[x][y])
if random.random()結果以及除錯
總結:演算法計算量較大,因為對每乙個待分類的文字都要計算它到全體已知樣本的距離,才能求得它的k個最近鄰點。該方法比較適用於樣本容量比較大的類域的分類,而那些樣本容量較小的類域採用這種演算法比較容易產生誤分。自我感覺對於整體**的理解還是欠缺。使用anaconda比較方便,可以導包直接獲取到鳶尾花的資料集。完成的還是很困難。源**參考其他。
Python實現KNN演算法
from numpy import import operator def creatdataset group array 1.0,1.1 1.0,1.0 0,0 0,0.1 lables a a b b return group,lables def classify0 inx,dataset,...
python實現knn演算法
importnumpyasnp importoperator defcreatedataset group np.array 1.0 1.1 1.0 1.0 0.0 0.0 0.0 0.1 labels a a b b returngroup,labels 分類演算法 inx待分類的點 defcla...
python實現KNN演算法
具體 如下 import numpy as np import matplotlib.pyplot as plt class myknn def init self,k self.k k def compute self,x train,y train,x test dist i 0 計算歐式距離 ...