1. 程式人生 > >SKlearn實現鳶尾花分類

SKlearn實現鳶尾花分類

1.鳶尾花資料集介紹:

Iris資料集是常用的分類實驗資料集,由Fisher在1936收集整理。Iris也稱鳶尾花卉資料集,是一類多重變數分析的資料集。資料集包含150個數據集,分為3類,每類50個數據,每個資料包含4個屬性。可通過花萼長度,花萼寬度,花瓣長度,花瓣寬度4個屬性預測鳶尾花卉屬於(Setosa,Versicolour,Virginica)三個種類中的哪一類。基於Fisher的線性判別模型,該資料整合為了機器學習中各種分類技術的典型實驗案例。

資料集如何獲取:

在sklearn庫中已經包含了一些經典的示例資料集,通過datasets載入。

2.分類基本原理:決策樹

決策樹簡介

決策樹是一種特殊的樹形結構,一般由節點和有向邊組成。其中,節點表示特徵、屬性或者一個類。而有向邊包含有判斷條件。如圖所示,決策樹從根節點開始延伸,經過不同的判斷條件後,到達不同的子節點。而上層子節點又可以作為父節點被進一步劃分為下層子節點。一般情況下,我們從根節點輸入資料,經過多次判斷後,這些資料就會被分為不同的類別。這就構成了一顆簡單的分類決策樹。

此處輸入圖片的描述

 決策樹學習

我們將決策數的思想引入到機器學習中,就產生了一種簡單而又經典的預測方法 —— 決策樹學習(Decision Tree Learning),亦簡稱為決策樹。決策樹可以用來解決分類或迴歸問題,分別稱之為分類樹或迴歸樹。其中,分類樹的輸出是一個標量,而回歸樹的一般輸出為一個實數。

通常情況下,決策樹利用損失函式最小的原則建立模型,然後再利用該模型進行預測。決策樹學習通常包含三個階段:特徵選擇、樹的生成,樹的修剪。

 特徵選擇

特徵選擇是建立決策樹之前十分重要的一步。如果是隨機地選擇特徵,那麼所建立決策樹的學習效率將會大打折扣。舉例來講,銀行採用決策樹來解決信用卡審批問題,判斷是否向某人發放信用卡可以根據其年齡、工作單位、是否有不動產、歷史信貸情況等特徵決定。而選擇不同的特徵,後續生成的決策樹就會不一致,這種不一致最終會影響到決策樹的分類效率。

通常我們在選擇特徵時,會考慮到兩種不同的指標,分別為:資訊增益和資訊增益比。要想弄清楚這兩個概念,我們就不得不提到資訊理論中的另一個十分常見的名詞 —— 熵。

熵(Entropy)是表示隨機變數不確定性的度量。簡單來講,熵越大,隨機變數的不確定性就越大。而特徵 A 對於某一訓練集 D 的資訊增益 g(D, A) 定義為集合 D 的熵 H(D) 與特徵 A 在給定條件下 D 的熵 H(D/A) 之差。

此處輸入圖片的描述

上面這段定義讀起來很拗口,也不是特別容易理解。那麼,下面我使用更通俗的語言概述一下。簡單來講,每一個特徵針對訓練資料集的前後資訊變化的影響是不一樣的,資訊增益越大,即代表這種影響越大。而影響越大,就表明該特徵更加重要。

 生成演算法

當我們瞭解資訊增益的概念之後,我們就可以學習決策樹的生成演算法了。其中,最經典的就數 John Ross Quinlan 提出的 ID3 演算法,這個演算法的核心理論即源於上面提到的資訊增益。

ID3 演算法通過遞迴的方式建立決策樹。建立時,從根節點開始,對節點計算每個獨立特徵的資訊增益,選擇資訊增益最大的特徵作為節點特徵。接下來,對該特徵施加判斷條件,建立子節點。然後針對子節點再此使用資訊增益進行判斷,直到所有特徵的資訊增益很小或者沒有特徵時結束,這樣就逐步建立一顆完整的決策樹。

除了從資訊增益演化而來的 ID3 演算法,還有一種常見的演算法叫 C4.5。C4.5 演算法同樣由 John Ross Quinlan 發明,但它使用了資訊增益比來選擇特徵,這被看成是 ID3 演算法的一種改進。

ID3 和 C4.5 演算法簡單高效,但是他倆均存在一個缺點,那就是用“完美去造就了另一個不完美”。這兩個演算法從資訊增益和資訊增益比開始,對整個訓練集進行的分類,擬合出來的模型針對該訓練集的確是非常完美的。但是,這種完美就使得整體模型的複雜度較高,而對其他資料集的預測能力就降低了,也就是我們常說的過擬合而使得模型的泛化能力變弱。

當然,過擬合的問題也是可以解決的,那就是對決策樹進行修剪。

決策樹修剪

決策樹的修剪,其實就是通過優化損失函式來去掉不必要的一些分類特徵,降低模型的整體複雜度。修剪的方式,就是從樹的葉節點出發,向上回縮,逐步判斷。如果去掉某一特徵後,整棵決策樹所對應的損失函式更小,那就就將該特徵及帶有的分支剪掉。

此處輸入圖片的描述

由於 ID3 和 C4.5 只能生成決策樹,而修剪需要單獨進行,這也就使得過程更加複雜了。1984年,Breiman 提出了 CART 演算法,使這個過程變得可以一步到位。CART 演算法本身就包含了決策樹的生成和修剪,並且可以同時被運用到分類樹和迴歸樹。這就是和 ID3 及 C4.5 之間的最大區別。

CART 演算法在生成樹的過程中,分類樹採用了基尼指數(Gini Index)最小化原則,而回歸樹選擇了平方損失函式最小化原則。基尼指數其實和前面提到的熵的概念是很相似的。簡單概述區別的話,就是數值相近但不同,而基尼指數在運算過程中的速度會更快一些。

CART 演算法也包含了樹的修剪。CART 演算法從完全生長的決策樹底端剪去一些子樹,使得模型更加簡單。而修剪這些子樹時,是每次去除一顆,逐步修剪直到根節點,從而形成一個子樹序列。最後,對該子樹序列進行交叉驗證,再選出最優的子樹作為最終決策樹。

3.SKlearn中的決策樹API引數介紹

1.c'riterion:取值‘gini’(基尼係數)或entropy(資訊熵),用以使用哪種判斷樹的確定性增益進行分類,

兩個引數沒有明顯區別。

2.spliter:取值 ‘best’ 或‘random’  前者在特徵中去最好位置切分點(適用於規模較小的資料集),

後者在部分特徵中取優解(適用於規模較大的資料集)

3.max_depth:樹的最大深度,控制樹的大小以防止過擬合。

4.max_samples_split:如果建樹過程中節點的樣本數少於max_samples_split,不再進行分類。

5.min_samples_leaf:     用於剪枝過程,如果葉子節點的樣本數少於min_samples_leaf,則對其剪枝。

6.max_leaf_nodes:       最大的葉子數目,防止過擬合。

7.min_impurity_split:進行下一步分類的判斷依據——閾值,如果分類的資訊熵增益或者基尼係數增益

小於閾值則不再進行下一步分類。

預設值:

def __init__(self,
                 criterion="gini",
                 splitter="best",
                 max_depth=None,
                 min_samples_split=2,
                 min_samples_leaf=1,
                 min_weight_fraction_leaf=0.,
                 max_features=None,
                 random_state=None,
                 max_leaf_nodes=None,
                 min_impurity_decrease=0.,
                 min_impurity_split=None,
                 class_weight=None,
                 presort=False):

4.程式程式碼

簡單程式碼示例:

from sklearn import datasets
import matplotlib.pyplot as plt
import numpy as np
from sklearn import tree
# Iris資料集是常用的分類實驗資料集,
# 由Fisher, 1936收集整理。Iris也稱鳶尾花卉資料集,
# 是一類多重變數分析的資料集。資料集包含150個數據集,
# 分為3類,每類50個數據,每個資料包含4個屬性。
# 可通過花萼長度,花萼寬度,花瓣長度,花瓣寬度4個屬性預測鳶尾花卉屬於(Setosa,Versicolour,Virginica)三個種類中的哪一類。

#載入資料集
iris = datasets.load_iris()
iris_data=iris['data']
iris_label=iris['target']
iris_target_name=iris['target_names']
X=np.array(iris_data)
Y=np.array(iris_label)

#訓練
clf=tree.DecisionTreeClassifier(max_depth=3)
clf.fit(X,Y)

#這裡預測當前輸入的值的所屬分類
print('類別是',iris_target_name[clf.predict([[7,7,7,7]])[0]])


相關推薦

SKlearn實現鳶尾花分類

1.鳶尾花資料集介紹:Iris資料集是常用的分類實驗資料集,由Fisher在1936收集整理。Iris也稱鳶尾花卉資料集,是一類多重變數分析的資料集。資料集包含150個數據集,分為3類,每類50個數據,每個資料包含4個屬性。可通過花萼長度,花萼寬度,花瓣長度,花瓣寬度4個屬性

利用sklearn實現分類demo

常見的文字分類中,二分類問題居多,多分類問題其實也挺常見的,這裡簡單給出一個多分類的實驗demo。 1 引入相應的庫 # 引入必要的庫 import numpy as np import matplotlib.pyplot as plt from ite

利用sklearn 實現SVM分類

scv  函式 class sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache

機器學習(三):感知器演算法實現鳶尾花分類專案實戰

上一章我們已經介紹了感知器演算法規則,並且用python語言實現了。現在我們應用感知器學習規則進行鳶尾花分類實驗。 測試資料我們從鳶尾花資料集中挑選出了山鳶尾(Setosa)和變色鳶尾(Versicolor)兩種花的資訊作為測試資料。雖然感知器並不將資料樣本特

Python sklearn實現PCA(以鳶尾花分類為例)

PCA簡介 主成分分析(Principal Component Analysis,PCA)是最常用的一種降維方法,通常用於高維資料集的探索與視覺化,還可以用作資料壓縮和預處理等。矩陣的主成分就是其協

分類問題(一):SVM(Python——基於skearn實現鳶尾花資料集分類)

第一步: # -*- coding: utf-8 -*- """ Created on Fri Sep 21 14:26:25 2018 @author: bd04 """ # !/usr/bin/env python # encoding: utf-8 __auth

sklearn庫:分類、迴歸、聚類、降維、模型優化、文字預處理實現用例(趕緊收藏)

分類演算法 # knn演算法 from sklearn.neighbors import KNeighborsClassifier knn = KNeighborsClassifier() ''' __init__函式 def __init__(self, n_neighbors=5,

樸素貝葉斯演算法——實現新聞分類Sklearn實現

1、樸素貝葉斯實現新聞分類的步驟 (1)提供文字檔案,即資料集下載 (2)準備資料          將資料集劃分為訓練集和測試集;使用jieba模組進行分詞,詞頻統計,停用詞過濾,文字特徵提取,將文字資料向量化 (3)分析資料:使用matplotlib模組分

sklearn svm實現文字分類 入門

正在學習sklearn , 實驗室專案需要實現一些文字的分類的功能。 sklearn提供了許多機器學習方面使用的到的寫好的工具。其中也包括分類器。sklearn在這裡不作介紹。有官網,有部落格,也正在學習中 最開始是參照著這片文章: https://seg

鬼吹燈文字挖掘5:sklearn實現文字聚類和文字分類

1. 準備資料import numpy as np import pandas as pd import re import jieba # 章節判斷用變數預處理 def is_chap_head(tmpstr): import re pattern = r

實現鳶尾花資料集分類

轉自:http://blog.csdn.net/jasonding1354/article/details/42143659 引入 一個機器可以根據照片來辨別鮮花的品種嗎?在機器學習角度,這其實是一個分類問題,即機器根據不同品種鮮花的資料進行學習,使其可以對未標記的測

人工智慧深度學習TensorFlow通過感知器實現鳶尾花資料集分類

一.iris資料集簡介 iris資料集的中文名是安德森鳶尾花卉資料集,英文全稱是Anderson’s Iris data set。iris包含150個樣本,對應資料集的每行資料。每行資料包含每個樣本的四個特徵和樣本的類別資訊,所以iris資料集是一個150行5列的二維表。 通俗地說,iris

python Sklearn實現xgboost的二分類和多分類

二分類:train2.txt的格式如下:import numpy as np import pandas as pd import sklearn from sklearn.cross_validati

利用線性函式實現鳶尾花資料集分類

在空間中,我們定義分類的線性函式為:g(x)=wTx+bg(x)=w^{T}x+bg(x)=wTx+b 其中樣本x=(x1,x2,...,xl)Tx=(x_{1},x_{2},...,x_{l})^{T}x=(x1​,x2​,...,xl​)T,權向量w=(w1

感知器實現鳶尾花分類

scalar param where self. spa min break pyplot con import numpy as npfrom sklearn.datasets import load_irisimport pandas as pdimport matpl

PHP 根據子ID遞歸獲取父級ID,實現逐級分類導航效果

top () == return clas urn php nbsp 遞歸 代碼: //當前路徑 $cate=M(‘wangpan_class‘)->select(); function get_top_parentid($cate,$i

使用BOF實現動物分類:matlab版本

tlab 階段 可能 ict 獲取圖片 eat 函數 datastore tco 1.訓練集測試集劃分(同上一篇) 2.代碼部分 1)訓練部分代碼:training.m %% 該函數是使用Bag of Features來提取test_images下圖片的特征的,代碼編寫參

使用HOG+LBP實現動物分類:matlab版本

path ict store ima blog 顯示 ges count 結束 1.訓練集測試集劃分(同上一篇) 2.代碼部分 %% 利用HOG + LBP分類 %% 1 數據集,包括訓練的和測試的 currentPath = pwd; % 獲得當前的工作目錄

<Machine Learning in Action >之二 樸素貝葉斯 C#實現文章分類

options 直升機 water 飛機 math mes 視頻 write mod def trainNB0(trainMatrix,trainCategory): numTrainDocs = len(trainMatrix) numWords =

SVM實現分類的三種方案

一次 libs 工程 類函數 合並 clas 情況 之一 設計 轉載自:http://www.cnblogs.com/CheeseZH/p/5265959.html SVM本身是一個二值分類器   SVM算法最初是為二值分類問題設計的,當處理多類問題時,就需要構造合適的多類