1. 程式人生 > >決策樹之ID3演算法實現(python)

決策樹之ID3演算法實現(python)


最近開始學習machine learning方面的內容,大致瀏覽了一遍《machine learning in action》一書,大概瞭解了一些常用的演算法如knn,svm等具體式幹啥的。

在kaggle上看到一個練手的專案:digit classification,又有良好的資料,於是打算用這個專案把各種演算法都跑一遍,加深自己對各演算法的研究,該文會不斷更新。。。。。。

我們的資料集是mnist,連結:http://yann.lecun.com/exdb/mnist/

mnist的結構如下,選取train-images

TRAINING SET IMAGE FILE (train-images-idx3-ubyte):

[offset] [type]          [value]          [description] 
0000     32 bit integer  0x00000803(2051) magic number 
0004     32 bit integer  60000            number of images 
0008     32 bit integer  28               number of rows 
0012     32 bit integer  28               number of columns 
0016     unsigned byte   ??               pixel

 
0017     unsigned byte   ??               pixel 
........ 
xxxx     unsigned byte   ??               pixel

吶,由於智商比較拙急,看了這個形式居然沒看明白,所以特此寫出要注意的點,送給同樣沒看明白的童鞋。

首先該資料是以二進位制儲存的,我們讀取的時候要以'rb'方式讀取,其次,真正的資料只有[value]這一項,其他的[type]等只是來描述的,並不真正在資料檔案裡面。

由offset我們可以看出真正的pixel式從16開始的,一個int 32位元組,所以在讀取pixel之前我們要讀取4個 32 bit integer,也就是magic number,number of images,number of rows,number of columns,讀取二進位制檔案用struct比較方便,struct.unpack_from('>IIII',buf,index)表示按照大端方式讀取4個int.

雖然資料集網站寫著“Users of Intel processors and other low-endian machines must flip the bytes of the header.”,而我的電腦就是intel處理器,但是我嘗試了一把還是得用大端方式讀,讀出來才是“2051 60000 28 28”,用小端方式讀取就不正確了,這個小小實驗一把就行。

下面先把資料檔案直觀的表現出來,用matplotlib把二進位制檔案用影象表現出來。具體如下:

  1. # -*- coding:utf-8
  2. import numpy as np   
  3. import struct  
  4. import matplotlib.pyplot as plt   
  5. filename = 'train-images.idx3-ubyte'
  6. binfile = open(filename,'rb')#以二進位制方式開啟
  7. buf = binfile.read()  
  8. index = 0
  9. magic, numImages, numRows, numColums = struct.unpack_from('>IIII',buf,index)#讀取4個32 int
  10. print magic,' ',numImages,' ',numRows,' ',numColums  
  11. index += struct.calcsize('>IIII')  
  12. im = struct.unpack_from('>784B',buf,index)#每張圖是28*28=784Byte,這裡只顯示第一張圖
  13. index += struct.calcsize('>784B' )  
  14. im = np.array(im)  
  15. im = im.reshape(28,28)  
  16. print im  
  17. fig = plt.figure()  
  18. plt.imshow(im,cmap = 'binary')#黑白顯示
  19. plt.show()  

結果如下(很明顯式一個5字):

好,既然能夠圖形化表示數字,基本上該數字的feature我們都能拿到,一下就是用各種機器學習演算法來做digit classification。

以上是顯示一個圖片,而我們的各種學習演算法一定是處理多個圖片的,那麼有必要單獨寫一個檔案來處理資料問題,即

ReadData.py:(程式碼和上面不少相似,這裡只給連結)

(1)KNN:

      KNN可以說是最簡單的分類器了。首先給予訓練資料,並且給予這些訓練資料的類別,然後當有一個新的資料進來的時候,根據最臨近的k個節點的分類情況,例如k=5,就

取離新資料最近的5個點,假設3個類別是A,2個是B,按照多數服從少數的原則,將新資料賦予類別A.

具體程式碼如下:

  1. from sklearn import neighbors  
  2. from ReadData import *  
  3. import datetime  
  4. startTime = datetime.datetime.now();  
  5. trainImage = getTrainImage()  
  6. trainLabel = getTrainLabel()  
  7. testImage = getTestImage()  
  8. testLabel = getTestLabel()  
  9. knn = neighbors.KNeighborsClassifier(algorithm = 'auto',leaf_size = 30,n_neighbors=3,warn_on_equidistant = True,weights = 'uniform')  
  10. knn.fit(trainImage,trainLabel)  
  11. match = 0;  
  12. for i in xrange(len(testLabel)):  
  13.     predictLabel = knn.predict(testImage[i])[0]  
  14.     print i,' ',  
  15.     print predictLabel,' ', testLabel[i]  
  16. 相關推薦

    決策ID3演算法實現(python) [置頂] 怒寫一個digit classification(不斷更新中)

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

    決策ID3演算法實現(python)

    最近開始學習machine learning方面的內容,大致瀏覽了一遍《machine learning in action》一書,大概瞭解了一些常用的演算法如knn,svm等具體式幹啥的。 在kaggle上看到一個練手的專案:digit classification,又有良好的資料,於是打算用這個

    決策ID3演算法

    今天,我來講解的是決策樹。對於決策樹來說,主要有兩種演算法:ID3演算法和C4.5演算法。C4.5演算法是 對ID3演算法的改進。今天主要先講ID3演算法,之後會講C4.5演算法和隨機森林等。 Contents 1. 決策樹的基本認識 2. ID3演算法介紹

    【Machine Learning·機器學習】決策ID3演算法(Iterative Dichotomiser 3)

    目錄 1、什麼是決策樹 2、如何構造一棵決策樹? 2.1、基本方法 2.2、評價標準是什麼/如何量化評價一個特徵的好壞? 2.3、資訊熵、資訊增益的計算 2.4、決策樹構建方法

    決策CART演算法原理及python實現

    1 CART演算法 CART 是在給定輸入X條件下輸出隨機變數Y的條件概率分佈的學習方法。CART二分每個特徵(包括標籤特徵以及連續特徵),經過最優二分特徵及其最優二分特徵值的選擇、切分,二叉樹生成,剪枝來實現CART演算法。對於迴歸CART樹選擇誤差平方和準

    決策ID3演算法理解與R語言實現

    一、演算法理解 想來想去,還是決定用各大暢銷書中的相親例子來解釋什麼叫決策樹。 簡單來說,決策樹就是根據各種變數,作為輸入條件,最終輸出決策的過程。比如上圖中女方在相親過程中,影響是否見男方的變數有年齡、長相、收入、是否是公務員等。 最終在各種變數組合下,最終輸出見或不

    決策學習 -- ID3演算法和C4.5演算法(C++實現

    前言 在學習西瓜書的時候,由於書本講的大多是概念,所以打算用C++實現它的演算法部分(至於python和matlab實現,實現簡單了很多,可以自己基於C++程式碼實現)。至於測試資料,採用了書中關於西瓜的資料集。 什麼是決策樹 首先,決策樹(也叫做分類

    決策ID3算法

    dex 信息增益 lan 進入 根據 keys one 回顧 改進 一、決策樹之ID3算法簡述   1976年-1986年,J.R.Quinlan給出ID3算法原型並進行了總結,確定了決策樹學習的理論。這可以看做是決策樹算法的起點。1993,Quinlan將ID3算法改進

    第3章 決策ID3演算法、建立繪製決策、分類器、儲存、預測隱性眼鏡型別)

    ID3演算法 ID3演算法的核心是在決策樹各個結點上對應資訊增益準則選擇特徵,遞迴地構建決策樹。具體方法是:從根結點(root node)開始,對結點計算所有可能的特徵的資訊增益,選擇資訊增益最大的特徵作為結點的特徵,由該特徵的不同取值建立子節點;再對子結點遞迴地呼叫以上方法,構建決策樹

    決策分類器演算法實現

    # -*- coding: cp936 -*- #決策樹分類器 my_data=[['slashdot','USA','yes',18,'None'],['google','France','yes',23,'Premium'], ['digg','USA

    決策ID3、C4.5、C5.0

    2011年獲得了資料探勘領域最高榮譽獎KDD創新獎,昆蘭發明了著名的決策樹學習演算法ID3、C4.5,其個人主頁公佈了C4.5的C程式碼。—————————————————————————————————————————————————————————————————————

    決策ID3 C4,5 減枝 CART演算法)以及Python實現

    演算法簡述 在《統計學習方法》中,作者的if-then的描述,簡單一下子讓人理解了決策樹的基本概念。 決策樹,就是一個if-then的過程。 本文主要學習自《統計學習方法》一書,並努力通過書中數學推導來

    西瓜書決策ID3演算法實現,離散屬性

    from math import log import operator import csv def readDataset(filename): ''' 讀取資料 :param filename: 資料檔名,CSV格式 :return: 以列表形式返回資料列

    離散型與連續型資料決策構建及列印實現 R語言,ID3,C4.5演算法

    本人的第一篇文章,趁著我們的資料探勘課設的時間,把實現的決策樹程式碼,拿出來分享下。有很多漏洞和缺陷,還有很多駭客思想的成分,但是總之,能實現,看網上的程式碼,能用的其實也沒幾個。廢話不多說,直接看程式碼 特別鳴謝博主skyonefly的程式碼 附上鍊接:R

    視覺化決策Python實現

    決策樹(Decision Tree)是在已知各種情況發生概率的基礎上,通過構成決策樹來求取淨現值的期望值大於等於零的概率,評價專案風險,判斷其可行性的決策分析方法,是直觀運用概率分析的一種圖解法。一些

    《機器學習》 周志華學習筆記第四章 決策(課後習題)python 實現

    一、基本內容 1.基本流程 決策樹的生成過程是一個遞迴過程,有三種情形會導致遞迴返回 (1)當前節點包含的yangben全屬於同一類別,無需劃分; (2)當前屬性集為空,或是所有yangben在所有屬性上的取值相同,無法劃分; (3)當前結點包含的yangben集合為空,不能

    決策的構建演算法 -- ID3 與 C4.5 演算法

    1. 概述 上一篇日誌中,我們介紹了最簡單的分類迴歸演算法 – K 近鄰演算法。 k 近鄰演算法 本篇日誌我們來介紹構建專家系統和資料探勘最常用的演算法 – 決策樹。 2. 決策樹 在系統流程圖中,我們常

    決策模型 ID3/C4.5/CART演算法比較

    決策樹模型在監督學習中非常常見,可用於分類(二分類、多分類)和迴歸。雖然將多棵弱決策樹的Bagging、Random Forest、Boosting等tree ensembel 模型更為常見,但是“完全生長”決策樹因為其簡單直觀,具有很強的解釋性,也有廣泛的應用,而且決策樹是

    機器學習:決策ID3,C4.5,CART演算法描述

    文章目錄 概念理解 熵: 條件熵: 資訊增益,互資訊: 資訊增益比 基尼指數 ID3演算法描述 C4.5演算法描述 CART (Classification and Regression Tree

    決策基本理論學習以及Python程式碼實現和詳細註釋

    首先是樹的概念我們都比較熟悉了,然後決策樹其實就是一棵樹,通過在每一個幾點通過特徵的不同,走向不同的子樹直到走到葉子節點找到分類的標籤,算是完成了分類的過程。分類的過程不難理解,主要的是資料構造過程。 首先是構造的依據是什麼呢,以什麼依據作為特徵使用的選擇條件