日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

决策树实现鸢尾花分类

發布時間:2023/12/29 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 决策树实现鸢尾花分类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

介紹

在這篇博客中,我們使用以下幾個庫來實現決策樹算法

  • scikit-learn機器學習庫

scikit-learn最先是由David Cournapeau在2007年發起的一個Google Summer of Code項目,從那時起這個項目就已經擁有很多的貢獻者了,該項目目前也是由一個志愿者團隊在維護著。scikit-learn是python的一個開源機器學習模塊,它建立在numpy,scipy和matplotlib模塊之上。scikit-learn最大的特點就是,為用戶提供各種機器學習算法接口,可以讓用戶簡單、高效地進行數據挖掘和數據分析。
scikit-learn內包含了常用的機器學習數據集,比如做分類的iris和digit數據集,用于回歸的經典數據集Boston house prices。scikit-learn載入的數據集是以類似于字典的形式存放的,該對象中包含了所有有關該數據的數據信息(甚至還有參考文獻)。其中的數據值統一存放在.data的成員中。

  • numpy

NumPy是Python語言的一個擴充程序庫。支持高級大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。Numpy內部解除了Python的PIL(全局解釋器鎖),運算效率極好,是大量機器學習框架的基礎庫!

  • pandas

Pandas是一個開源的Python數據分析庫。Pandas把結構化數據分為了三類:
1)Series,1維序列,可視作為沒有column名的、只有一個column的DataFrame;
2)DataFrame,同Spark SQL中的DataFrame一樣,其概念來自于R語言,為多column并schema化的2維結構化數據,可視作為Series的容器(container);
3)Panel,為3維的結構化數據,可視作為DataFrame的容器;

  • matplotlib

matplotlib是一個python的數據可視化模塊,能夠創建多數類型的圖表,如條形圖,散點圖,條形圖,餅圖,堆疊圖,3D 圖和地圖圖表。

  • seaborn

seaborn與matlotlib同出一源,只是把matplotlib進行了封裝,讓許多方法調用時變得更加簡便。簡單的操作就能夠畫出更加復雜的圖像。由于seaborn是調用的matplotlib,在使用時,兩個庫可以進行相互操作。

導入庫

import numpy as np import matplotlib.pyplot as plt import seaborn as sns import pandas as pd from sklearn import tree from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score from sklearn.externals import joblib

數據集

鳶尾花數據集(iris_data)是原則20世紀30年代的經典數據集。它是用統計進行分類的鼻祖。

1)下面我們從scikit-learn接口導入數據集(第一行)

在導入數據集后我們打印前五行發現每個樣本有五個參數,分別為花萼長度、花萼寬度、花瓣長度、花瓣寬度和所屬類別(山鳶尾花、變色鳶尾花和維吉尼亞鳶尾花)。

iris=sns.load_dataset("iris") print(iris.head()) sepal_length sepal_width petal_length petal_width species 0 5.1 3.5 1.4 0.2 setosa 1 4.9 3.0 1.4 0.2 setosa 2 4.7 3.2 1.3 0.2 setosa 3 4.6 3.1 1.5 0.2 setosa 4 5.0 3.6 1.4 0.2 setosa

2)現在我們打印一下這個數據集的shape,可以發現這個數據集一共包含150個樣本,每個樣本五個參數。

print(iris.shape) (150, 5)

3)打印數據集四個特征的詳細分布情況

print(iris.describe()) sepal_length sepal_width petal_length petal_width count 150.000000 150.000000 150.000000 150.000000 mean 5.843333 3.057333 3.758000 1.199333 std 0.828066 0.435866 1.765298 0.762238 min 4.300000 2.000000 1.000000 0.100000 25% 5.100000 2.800000 1.600000 0.300000 50% 5.800000 3.000000 4.350000 1.300000 75% 6.400000 3.300000 5.100000 1.800000 max 7.900000 4.400000 6.900000 2.500000

可視化

seaborn畫圖-----pairplot多變量圖

1)格式

seaborn.pairplot(data, hue=None, hue_order=None, palette=None, vars=None, x_vars=None, y_vars=None, kind=‘scatter’, diag_kind=‘hist’, markers=None, size=2.5, aspect=1, dropna=True, plot_kws=None, diag_kws=None, grid_kws=None)

2)基本參數

size : 默認 6,圖的尺度大小(正方形)。參數類型:numeric

hue : 使用指定變量為分類變量畫圖。參數類型:string (變量名)

hue_order : list of strings Order for the levels of the hue variable in the palette

palette : 調色板顏色

markers : 使用不同的形狀。參數類型:list

aspect : scalar, optional。Aspect * size gives the width (in inches) of each facet.

{plot, diag, grid}_kws : 指定其他參數。參數類型:dicts

sns.set(style="ticks") sns.pairplot(iris,hue="species",palette="bright") plt.show()

決策樹算法實現

劃分數據集

yyy 表示數據集的標簽,XXX 代表每一行除標簽以外的特征。注意這里的axis=1axis=1axis=1表述行,axis=0axis=0axis=0表述列。

y=iris.species X=iris.drop('species',axis=1)
  • train_test_split函數

train_test_split函數用于將矩陣隨機劃分為訓練子集和測試子集,并返回劃分好的訓練集測試集樣本和訓練集測試集標簽。

格式:

X_train,X_test, y_train, y_test =cross_validation.train_test_split(train_data,train_target,test_size=0.3, random_state=0)

  • 參數解釋

train_data:被劃分的樣本特征集

train_target:被劃分的樣本標簽

test_size:如果是浮點數,在0-1之間,表示樣本占比;如果是整數的話就是樣本的數量

random_state:是隨機數的種子。

隨機數種子:其實就是該組隨機數的編號,在需要重復試驗的時候,保證得到一組一樣的隨機數。比如你每次都填1,其他參數一樣的情況下你得到的隨機數組是一樣的。但填0或不填,每次都會不一樣。

隨機數的產生取決于種子,隨機數和種子之間的關系遵從以下兩個規則:

1)種子不同,產生不同的隨機數;

2)種子相同,即使實例不同也產生相同的隨機數。

from sklearn.model_selection import train_test_split X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=100,stratify=y)

決策樹算法

1)從scikit-learn中調用決策樹算法

2)訓練(fit(x,y))

clf=tree.DecisionTreeClassifier() clf.fit(X_train,y_train) DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,max_features=None, max_leaf_nodes=None,min_impurity_decrease=0.0, min_impurity_split=None,min_samples_leaf=1, min_samples_split=2,min_weight_fraction_leaf=0.0, presort=False, random_state=None,splitter='best')

3)導出決策樹,將數據用決策樹算法進行訓練后,該算法會將數據進行分類,我們使用graphvizgraphvizgraphviz庫生成一個.dot.dot.dot文件。

from sklearn.datasets import load_iris iris=load_iris() tree.export_graphviz(clf,out_file="iris.dot",feature_names=iris.feature_names,class_names=iris.target_names,filled=True,rounded=True,special_characters=True)

使用一個Graphviz軟件得到決策樹如下:

預測(predict()函數)

y_pred=(clf.predict(X_test))

輸出正確率

Recall =預測正確正/(預測正確正+預測錯誤的負)

Accuracy = (true positives + true negatives) / (total examples)

print("Accuracy Score") print(accuracy_score(y_test,y_pred)*100) Accuracy Score 95.55555555555556

總結

以上是生活随笔為你收集整理的决策树实现鸢尾花分类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。