1. 程式人生 > >【Machine Learning】KNN演算法虹膜圖片識別

【Machine Learning】KNN演算法虹膜圖片識別

import csv
import math
import random
import operator

'''
Description:python呼叫機器學習庫scikit-learn的K臨近演算法,實現花瓣分類
Author:Bai Ningchao
DateTime:2017年1月3日15:07:25
Blog URL:http://www.cnblogs.com/baiboy/
Document:http://scikit-learn.org/stable/modules/neighbors.html
'''

'載入資料集,split劃分資料集為訓練集和測試集'
def loadDataset(filename,split,trainingSet=[],testSet=[]):
    with open(filename,'r') as csvfile:
        lines = csv.reader(csvfile)
        dataset = list(lines)
        # print(dataset[:20])
        for x in range(len(dataset)-1):
            for y in range(4):
                dataset[x][y] = float(dataset[x][y])
            if random.random() < split:
                trainingSet.append(dataset[x])
                # print(dataset[x])
            else:
                testSet.append(dataset[x])
                # print('-->',dataset[x])

'計算距離'
def euclideanDistance(instance1,instance2,length):
    distance = 0
    for x in range(length):
        distance += pow((instance1[x]-instance2[x]),2)
    return math.sqrt(distance)

'返回最近的K個label'
def getNeighbors(trainingSet,testInstance,k):
    distances = []
    length = len(testInstance)-1
    for x in range(len(trainingSet)):
        dist = euclideanDistance(testInstance, trainingSet[x], length)
        distances.append((trainingSet[x], dist))
    distances.sort(key=operator.itemgetter(1))
    neighbors = []
    for x in range(k):
        neighbors.append(distances[x][0])
        return neighbors

'根據投票進行分類劃分'
def getResponse(neighbors):
    classVotes = {}
    for x in range(len(neighbors)):
        response = neighbors[x][-1]
        if response in classVotes:
            classVotes[response] += 1
        else:
            classVotes[response] = 1
    sortedVotes = sorted(classVotes.items(),key=operator.itemgetter(1),reverse=True)
    return sortedVotes[0][0]

'預測結果,算出精確度'
def getAccuracy(testSet, predictions):
    correct = 0
    for x in range(len(testSet)):
        if testSet[x][-1] == predictions[x]:
            correct += 1
    return (correct/float(len(testSet)))*100.0




def main():
    trainingSet = []
    testSet = []
    split = 0.7 # 2/3訓練集,1/3測試集
    loadDataset(r'../datafile/irisdata.txt',split,trainingSet,testSet)
    print('Train set: ' + repr(len(trainingSet)))
    print('Test set: ' + repr(len(testSet)))
  #generate predictions
    predictions = []
    k =5
    for x in range(len(testSet)):
        neighbors = getNeighbors(trainingSet, testSet[x], k)
        result = getResponse(neighbors)
        predictions.append(result)
        print ('>predicted=' + repr(result) + ', actual=' + repr(testSet[x][-1]))
    print ('predictions: ' + repr(predictions))
    accuracy = getAccuracy(testSet,predictions)
    print('Accuracy: ' + repr(accuracy) + '%')


if __name__ == '__main__':
    main()

相關推薦

Machine LearningKNN演算法虹膜圖片識別

import csv import math import random import operator ''' Description:python呼叫機器學習庫scikit-learn的K臨近演算法,實現花瓣分類 Author:Bai Ningchao DateTime:2017年1

machine learningGMM演算法(Python版)

本文參考CSDN大神的博文,並在講述中引入自己的理解,純粹理清思路,並將程式碼改為了Python版本。(在更改的過程中,一方面理清自己對GMM的理解,一方面學習了numpy的應用,不過也許是Python粉指數超標才覺得有必要改(⊙o⊙)) 一、GMM模型

機器學習演算法實現kNN演算法 手寫識別——基於Python和NumPy函式庫

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Machine :Learning 樸素貝葉斯

1. 樸素貝葉斯: 條件概率在機器學習演算法的應用。理解這個演算法需要一點推導。不會編輯公式。。 核心就是 在已知訓練集的前提條件下,算出每個特徵的概率為該分類的概率, 然後套貝葉斯公式計算 預測集的所有分類概率,預測型別為概率最大的型別 from numpy import * def l

Machine Learning 線性迴歸

線性迴歸 我們可以通過測量損耗來衡量線路的適合程度。 線性迴歸的目標是最小化損失。 為了找到最佳擬合線,我們嘗試找到最小化損失的b值(截距)和m值(斜率)。 收斂是指引數在每次迭代時停止變化時的引數 學習率是指每次迭代時引數的變化程度。 我們可以

Machine Learning使用隨機森林進行特徵選擇

一、特徵選擇         在我們做特徵工程時,當我們提取完特徵後,可能存在並不是所有的特徵都能分類起到作用的問題,這個時候就需要使用特徵選擇的方法選出相對重要的特徵用於構建分類器。此外,使用特徵選擇這一步驟也大大減少了訓練的時間,而且模型的擬合能力也不會出現很大的降低問

Machine LearningPython三、PSO + PCA優化SVM引數C和gamma ---- 《SVM物體分類和定位檢測》

---------------------【6.27 更新libsvm使用方法】-------------------------------------------------------------

Machine learning引數估計(個人通俗理解)

問題背景: 我們知道了總體的分佈,但不知道分佈的引數,因此我們就要對未知的引數做出估計。 兩個型別的估計: 1.點估計 2.區間估計 1.點估計 包括矩估計和極大似然估計 1)矩估計: 用樣本矩去估計總體矩 這裡就可以用樣本一階矩(均值)估計整體一階矩(

Machine LearningPython一、HoG + SVM 物體分類 ---- 《SVM物體分類和定位檢測》

----------【2018.09.07更新】--- 如果你看到了這篇文章,並且從github下載了程式碼想走一遍整個流程。我強烈建議你把《SVM物體分類和定位檢測》這一系列的6篇文章都仔細看一遍。內容不多,但會對你理解演算法和程式碼有很大的幫助。 ----------

Machine LearningPython開發工具:Anaconda+Sublime

作者:白寧超 2016年12月23日21:24:51 摘要:隨著機器學習和深度學習的熱潮,各種圖書層出不窮。然而多數是基礎理論知識介紹,缺乏實現的深入理解。本系列文章是作者結合視訊學習和書籍基礎的筆記所得。本系列文章將採用理論結合實踐方式編寫。首先介紹機器學習和深度學習的範疇,然後介紹關於訓練集、測試

Machine Learning機器學習及其基礎概念簡介

基本概念:訓練集,測試集,特徵值,監督學習,非監督學習,半監督學習,分類,迴歸 概念學習:人類學習概念:鳥,車,計算機 定義:概念學習是指從有關某個布林函式的輸入輸出訓練樣例中推斷出該布林函式 例子:學習 “享受運動" 這一概念: 小明進行水上運動,是否享受運動取決於很多因素 樣例 天

Machine Learning決策樹案例:基於python的商品購買能力預測系統

作者:白寧超 2016年12月24日22:05:42 摘要:隨著機器學習和深度學習的熱潮,各種圖書層出不窮。然而多數是基礎理論知識介紹,缺乏實現的深入理解。本系列文章是作者結合視訊學習和書籍基礎的筆記所得。本系列文章將採用理論結合實踐方式編寫。首先介紹機器學習和深度學習的範疇,然後介紹關於訓練集、

Machine LearningAndrew Ng- Quiz2(Week 6)

1、You are working on a spam classification system using regularized logistic regression. “Spam” is a positive class (y = 1) and “no

Machine LearningAndrew Ng- Quiz(Week 7)

1、Suppose you have trained an SVM classier with a Gaussian kernel, and it learned the following decision boundary on the training s

Machine learning決策樹(decision tree )

三個問題: 怎樣選擇根節點 怎樣選擇後繼節點 什麼時候停止 (一顆決策樹=》一個分類準則=》一個模型) 基本的演算法: 對一開始提出來的三個問題進行解答: 1.選擇最優屬性 ID3: 最優屬性選擇資訊增益最大的屬性來作為最優屬性 設D為用

Machine LearningAndrew Ng- Quiz1(Week 8)

1、For which of the following tasks might K-means clustering be a suitable algorithm? Select all that apply. A. Given a database o

Machine Learning特徵工程之獨熱編碼(One-hot Encoding)

一、獨熱編碼         當我們在機器學習做特徵工程時,如果某個categorical特徵具有多個符號值,則不可能對具有這種特徵的資料進行訓練,而獨熱編碼是解決這個問題的一種方法。比如我們有一個特徵是protocol_type有三個值:tcp,udp,icmp,那麼我們

Machine LearningMahout基於協同過濾(CF)的使用者推薦

一、Mahout推薦演算法簡介 Mahout演算法框架自帶的推薦器有下面這些: l  GenericUserBasedRecommender:基於使用者的推薦器,使用者數量少時速度快; l  GenericItemBasedRecommender:基於商品推薦器,商品數量

Machine LearningPython選擇最優引數(Decision Tree, Random Forest, Adaboost, GBDT)

之前訓練SVM用了PSO太慢了。 這次比較幸運看到一篇關於調參的部落格。 給了很大啟發。 不具體針對某種分類演算法詳細說了,這個真的需要大量實踐經驗,這也是我欠缺的。 我參考上面部落格做了一些實驗,準確率是在逐步提升,但因為我特徵處理這塊做的不好,準確率提升不明顯。 再

Machine Learning通過網格搜尋進行調參

        在我們日常的進行超引數優化工作時,可以手動去試,也可以使用隨機搜尋、批量隨機搜尋和網格搜尋等方法調到好的引數,關於網格搜尋,sklearn中GridSearchCV用於系統地遍歷多種引