前言:從現在開始博主要開始學習機器學習了,歡迎有共同興趣的人一起學習。廢話不多說了,開始上**
一、將資料集csv檔案匯入到python中,並將csv格式轉為list格式
def dataset():
#讀取訓練集檔案路徑
path = '/trains1.csv' #(os.path.abspath("../machinelearningdata/knn/use python and numpy/trainingdigits"))
with open(path,'r',encoding="utf-8") as f:
reader = csv.reader(f)
#[row for row in reader]叫做列表解析 根據已有列表,高效建立新列表的方式。 列表解析是python迭代機制的一種應用,它常用於實現建立新的列表,因此用在中。
#[row for row in reader] 等價於
#rows =
#for row in reader:
rows = [row for row in reader]
#因為第一行是說明,從第二行開始才是資料,所以從第二行開始
return rows[1:]
二、將返回的list進一步劃分成:訓練資料集,訓練目標資料,測試資料集,測試目標資料
這裡我將list進行分割,70%為訓練集,30%為測試集
data = dataset()
#訓練集
data_train = data[len(data)//3+1:]
trainingdata = [i[1:] for i in data_train]
#第0列為目標資料集,獲取第0列的資料
trainingtargetdata = [i[0] for i in data_train]
#測試集
data_test = data[:len(data) // 3]
testdata = [i[1:] for i in data_test]
testtargetdata = [i[0] for i in data_test]
三、呼叫 kneighborsclassifier 方法進行資料**
#開始訓練,這裡我設定的k臨近值為3
knn = kneighborsclassifier(n_neighbors=3)
# 訓練資料
knn.fit(trainingdata, trainingtargetdata)
prediction = knn.predict(testdata)
knn.score(testdata,testtargetdata)
right=0
for test,result in zip(testtargetdata,prediction):
if test == result:
right += 1
print('測試資料為:{},**資料為:{}'.format(test,result))
print('測試的準確率為->{}%'.format((right/len(testtargetdata))*100))
重新訓練了3萬條資料的結果,跑了20分鐘,準確度比之前高了很多
完整**:
import os
import numpy as np
import csv
from sklearn import neighbors
from sklearn.neighbors import kneighborsclassifier
#define one read train.csv function
def dataset():
#讀取訓練集檔案路徑
path = '資料集路徑' #(os.path.abspath("../machinelearningdata/knn/use python and numpy/trainingdigits"))
with open(path,'r',encoding="utf-8") as f:
reader = csv.reader(f)
#列表解析 根據已有列表,高效建立新列表的方式。 列表解析是python迭代機制的一種應用,它常用於實現建立新的列表,因此用在中。
#[row for row in reader] 等價於
#rows =
#for row in reader:
rows = [row for row in reader]
return rows[1:]
def main():
data = dataset()
#訓練集
data_train = data[len(data)//3+1:]
trainingdata = [i[1:] for i in data_train]
trainingtargetdata = [i[0] for i in data_train]
#測試集
data_test = data[:len(data) // 3]
testdata = [i[1:] for i in data_test]
testtargetdata = [i[0] for i in data_test]
#開始訓練
knn = kneighborsclassifier(n_neighbors=3)
# 訓練資料
knn.fit(trainingdata, trainingtargetdata)
prediction = knn.predict(testdata)
knn.score(testdata,testtargetdata)
right=0
for test,result in zip(testtargetdata,prediction):
if test == result:
right += 1
print('測試資料為:{},**資料為:{}'.format(test,result))
print('測試的準確率為->{}%'.format((right/len(testtargetdata))*100))
if __name__ == '__main__':
main()
手寫數字識別 實戰 KNN演算法識別手寫數字
鄰近演算法,或者說k最近鄰 knn,k nearestneighbor 分類演算法是資料探勘分類技術中最簡單的方法之一。所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。下面是我學習knn演算法的思維導圖 其中距離的定義,各個距離的公式為 歐氏距離 n維空間的距...
KNN演算法識別手寫數字識別集
呼叫sklearn中knn演算法庫,資料級為matlab檔案,使用matplot讀取,並進行一維化處理 from scipy.io import loadmat as load import matplotlib.pyplot as plt from sklearn.neighbors import...
KNN手寫數字識別
以歐幾里得距離度量樣本間的相似程度。對於乙個測試樣本首先計算該樣本與每個訓練樣本間的距離,然後按距離值對訓練樣本進行公升序排序,排序後前k個樣本進行投票,即哪個標籤出現的次數多,就將測試樣例劃為該類。程式使用資料 預先將資料處理為,標籤資訊轉化為txt文件。from numpy import imp...