婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python機器學習之決策樹

Python機器學習之決策樹

熱門標簽:外呼不封號系統 荊州云電銷機器人供應商 電信營業廳400電話申請 溫州旅游地圖標注 江蘇房產電銷機器人廠家 幫人做地圖標注收費算詐騙嗎 悟空智電銷機器人6 蘇州電銷機器人十大排行榜 遼寧400電話辦理多少錢

一、要求

二、原理

決策樹是一種類似于流程圖的結構,其中每個內部節點代表一個屬性上的“測試”,每個分支代表測試的結果,每個葉節點代表一個測試結果。類標簽(在計算所有屬性后做出的決定)。從根到葉的路徑代表分類規則。
決策樹學習的目的是為了產生一棵泛化能力強,即處理未見示例能力強的決策樹。因此如何構建決策樹,是后續預測的關鍵!而構建決策樹,就需要確定類標簽判斷的先后,其決定了構建的決策樹的性能。決策樹的分支節點應該盡可能的屬于同一類別,即節點的“純度”要越來越高,只有這樣,才能最佳決策。

經典的屬性劃分方法:

  • 信息增益
  • 增益率
  • 基尼指數

本次實驗采用了信息增益,因此下面只對信息增益進行介紹。

三、信息增益的計算方法

其中D為樣本集合,a為樣本集合中的屬性,Dv表示D樣本集合中a屬性為v的樣本集合。

Ent(x)函數是計算信息熵,表示的是樣本集合的純度信息,信息熵的計算方法如下:

其中pk表示樣本中最終結果種類中其中一個類別所占的比例,比如有10個樣本,其中5個好,5個不好,則其中p1 = 5/10, p2 = 5/10。

一般而言,信息增益越大,則意味著使用屬性α來進行劃分所獲得的“純度提升”越大,因此在選擇屬性節點的時候優先選擇信息增益高的屬性!

四、實現過程

本次設計用到了pandas和numpy庫,主要利用它們來對數據進行快速的處理和使用。
首先將數據讀入:

可以看到數據集的標簽是瓜的不同的屬性,而表格中的數據就是不同屬性下的不同的值等。

if(len(set(D.好瓜)) == 1):
        #標記返回 
        return D.好瓜.iloc[0]
    elif((len(A) == 0) or Check(D, A[:-1])):
        #選擇D中結果最多的為標記
        cnt = D.groupby('好瓜').size()
        maxValue = cnt[cnt == cnt.max()].index[0]
        return maxValue
    else:
        A1 = copy.deepcopy(A)
        attr = Choose(D, A1[:-1])
        tree = {attr:{}}
        for value in set(D[attr]):
            tree[attr][value] = TreeGen(D[D[attr] == value], A1)
    return tree

TreeGen函數是生成樹主函數,通過對它的遞歸調用,返回下一級樹結構(字典)來完成生成決策樹。

在生成樹過程中,有二個終止迭代的條件,第一個就是當輸入數據源D的所有情況結果都相同,那么將這個結果作為葉節點返回;第二個就是當沒有屬性可以再往下分,或者D中的樣本在A所有屬性下面的值都相同,那么就將D的所有情況中結果最多的作為葉節點返回。

其中Choose(D:pd.DataFrame, A:list)函數是選擇標簽的函數,其根據輸入數據源和剩下的屬性列表算出對應標簽信息增益,選擇能使信息增益最大的標簽返回

def Choose(D:pd.DataFrame, A:list):
    result = 0.0
    resultAttr = ''
    for attr in A:
        tmpVal = CalcZengYi(D, attr)
        if(tmpVal > result):
            resultAttr = attr
            result = tmpVal
    A.remove(resultAttr)
    return resultAttr


最后是結果:

{‘紋理': {‘稍糊': {‘觸感': {‘硬滑': ‘否', ‘軟粘': ‘是'}}, ‘清晰': {‘根蒂': {‘硬挺': ‘否', ‘蜷縮': ‘是', ‘稍蜷': {‘色澤': {‘青綠': ‘是', ‘烏黑': {‘觸感': {‘硬滑': ‘是', ‘軟粘': ‘否'}}}}}}, ‘模糊': ‘否'}}

繪圖如下:

五、程序

主程序

#!/usr/bin/python3
# -*- encoding: utf-8 -*-
'''
@Description:決策樹:
@Date     :2021/04/25 15:57:14
@Author      :willpower
@version      :1.0
'''
import pandas as pd
import numpy as np
import treeplot
import copy
import math
"""
@description  :計算熵值
---------
@param  :輸入為基本pandas類型dataFrame,其中輸入最后一行為實際結果
-------
@Returns  :返回熵值,類型為浮點型
-------
"""
def CalcShang(D:pd.DataFrame):
    setCnt = D.shape[0]
    result = 0.0
    # for i in D.groupby(D.columns[-1]).size().index:
    #遍歷每一個值
    for i in set(D[D.columns[-1]]):
        #獲取該屬性下的某個值的次數
        cnt = D.iloc[:,-1].value_counts()[i]
        result = result + (cnt/setCnt)*math.log(cnt/setCnt, 2)
    return (-1*result)
"""
@description  :計算增益
---------
@param  :輸入為DataFrame數據源,然后是需要計算增益的屬性值
-------
@Returns  :返回增益值,浮點型
-------
"""
def CalcZengYi(D:pd.DataFrame, attr:str):
    sumShang = CalcShang(D)
    setCnt = D.shape[0]
    result = 0.0
    valus = D.groupby(attr).size()
    for subVal in valus.index:
        result = result + (valus[subVal]/setCnt)*CalcShang(D[D[attr] == subVal])
    return sumShang - result
"""
@description  :選擇最佳的屬性
---------
@param  :輸入為數據源,以及還剩下的屬性列表
-------
@Returns  :返回最佳屬性
-------
"""
def Choose(D:pd.DataFrame, A:list):
    result = 0.0
    resultAttr = ''
    for attr in A:
        tmpVal = CalcZengYi(D, attr)
        if(tmpVal > result):
            resultAttr = attr
            result = tmpVal
    A.remove(resultAttr)
    return resultAttr
"""
@description  :檢查數據在每一個屬性下面的值是否相同
---------
@param  :輸入為DataFrame以及剩下的屬性列表
-------
@Returns  :返回bool值,相同返回1,不同返回0
-------
"""
def Check(D:pd.DataFrame, A:list):
    for i in A:
        if(len(set(D[i])) != 1):
            return 0
    return 1
"""
@description  :生成樹主函數
---------
@param  :數據源DataFrame以及所有類型
-------
@Returns  :返回生成的字典樹
-------
"""
def TreeGen(D:pd.DataFrame, A:list):
    if(len(set(D.好瓜)) == 1):
        #標記返回 
        return D.好瓜.iloc[0]
    elif((len(A) == 0) or Check(D, A[:-1])):
        #選擇D中結果最多的為標記
        cnt = D.groupby('好瓜').size()
        #找到結果最多的結果
        maxValue = cnt[cnt == cnt.max()].index[0]
        return maxValue
    else:
        A1 = copy.deepcopy(A)
        attr = Choose(D, A1[:-1])
        tree = {attr:{}}
        for value in set(D[attr]):
            tree[attr][value] = TreeGen(D[D[attr] == value], A1)
    return tree
"""
@description  :驗證集
---------
@param  :輸入為待驗證的數據(最后一列為真實結果)以及決策樹模型
-------
@Returns  :無
-------
"""
def Test(D:pd.DataFrame, model:dict):
    for i in range(D.shape[0]):
            data = D.iloc[i]
            subModel = model
            while(1):
                attr = list(subModel)[0]
                subModel = subModel[attr][data[attr]]
                if(type(subModel).__name__ != 'dict'):
                    print(subModel, end='')
                    break
    print('')
name = ['色澤', '根蒂', '敲聲', '紋理', '臍部', '觸感', '好瓜']
df = pd.read_csv('./savedata.txt', names=name)
# CalcZengYi(df, '色澤')
resultTree = TreeGen(df, name)
print(resultTree)
# print(df[name[:-1]])
Test(df[name[:-1]], resultTree)
treeplot.plot_model(resultTree,"resultTree.gv")

繪圖程序

from graphviz import Digraph

def plot_model(tree, name):
    g = Digraph("G", filename=name, format='png', strict=False)
    first_label = list(tree.keys())[0]
    g.node("0", first_label)
    _sub_plot(g, tree, "0")
    g.view()
root = "0"

def _sub_plot(g, tree, inc):
    global root

    first_label = list(tree.keys())[0]
    ts = tree[first_label]
    for i in ts.keys():
        if isinstance(tree[first_label][i], dict):
            root = str(int(root) + 1)
            g.node(root, list(tree[first_label][i].keys())[0])
            g.edge(inc, root, str(i))
            _sub_plot(g, tree[first_label][i], root)
        else:
            root = str(int(root) + 1)
            g.node(root, tree[first_label][i])
            g.edge(inc, root, str(i))

./savedata.txt

青綠,蜷縮,濁響,清晰,凹陷,硬滑,是
烏黑,蜷縮,沉悶,清晰,凹陷,硬滑,是
烏黑,蜷縮,濁響,清晰,凹陷,硬滑,是
青綠,蜷縮,沉悶,清晰,凹陷,硬滑,是
淺白,蜷縮,濁響,清晰,凹陷,硬滑,是
青綠,稍蜷,濁響,清晰,稍凹,軟粘,是
烏黑,稍蜷,濁響,稍糊,稍凹,軟粘,是
烏黑,稍蜷,濁響,清晰,稍凹,硬滑,是
烏黑,稍蜷,沉悶,稍糊,稍凹,硬滑,否
青綠,硬挺,清脆,清晰,平坦,軟粘,否
淺白,硬挺,清脆,模糊,平坦,硬滑,否
淺白,蜷縮,濁響,模糊,平坦,軟粘,否
青綠,稍蜷,濁響,稍糊,凹陷,硬滑,否
淺白,稍蜷,沉悶,稍糊,凹陷,硬滑,否
烏黑,稍蜷,濁響,清晰,稍凹,軟粘,否
淺白,蜷縮,濁響,模糊,平坦,硬滑,否
青綠,蜷縮,沉悶,稍糊,稍凹,硬滑,否

六、遇到的問題

graphviz Not a directory: ‘dot'

解決辦法

到此這篇關于Python機器學習之決策樹的文章就介紹到這了,更多相關Python決策樹內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python機器學習算法之決策樹算法的實現與優缺點
  • python機器學習實現決策樹
  • Python機器學習算法庫scikit-learn學習之決策樹實現方法詳解
  • python機器學習理論與實戰(二)決策樹
  • Python機器學習之決策樹算法
  • python機器學習之決策樹分類詳解
  • Python機器學習之決策樹算法實例詳解
  • 機器學習python實戰之決策樹
  • 分析機器學習之決策樹Python實現

標簽:宿遷 欽州 濟南 三沙 景德鎮 黃山 喀什 臺灣

巨人網絡通訊聲明:本文標題《Python機器學習之決策樹》,本文關鍵詞  Python,機器,學,習之,決策樹,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python機器學習之決策樹》相關的同類信息!
  • 本頁收集關于Python機器學習之決策樹的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产盗摄女厕一区二区三区| 在线不卡免费欧美| 欧美揉bbbbb揉bbbbb| 亚洲大片一区二区三区| 中文字幕一区二| 国产亚洲一本大道中文在线| 日韩午夜激情视频| 精品少妇一区二区三区在线播放| 9191精品国产综合久久久久久| 欧美色综合网站| 欧美久久久久久久久| 狠狠色综合色综合网络| 精品一区二区影视| 国产麻豆午夜三级精品| 视频在线观看一区| 国产一区二区调教| 成人动漫一区二区| 成人av一区二区三区| 欧美在线视频不卡| 91.xcao| 欧美图区在线视频| 久久综合久久综合九色| 亚洲天堂2016| www.亚洲在线| 美美哒免费高清在线观看视频一区二区 | 久久精品国产精品亚洲精品| 亚洲一级二级三级在线免费观看| 亚洲无人区一区| 老司机一区二区| 久久久99精品久久| 亚洲一区二区三区爽爽爽爽爽| 日韩成人免费在线| 在线影院国内精品| 亚洲精品视频一区二区| 国产成人综合在线观看| 日韩理论片一区二区| 国产乱一区二区| 91精品国产高清一区二区三区 | 精品欧美久久久| 91在线码无精品| 91丨九色丨国产丨porny| 成人性生交大片| 麻豆专区一区二区三区四区五区| 国产99精品国产| 久久不见久久见免费视频7 | 成人爱爱电影网址| 欧美视频在线观看一区二区| 成人av电影免费观看| 成人动漫一区二区三区| 91在线观看污| 久久久91精品国产一区二区精品 | 在线看不卡av| 香蕉乱码成人久久天堂爱免费| 三级久久三级久久久| 色先锋资源久久综合| 国产一区二区三区| 精品剧情在线观看| 捆绑紧缚一区二区三区视频| 国产夫妻精品视频| 精品国产一区二区在线观看| 久久精品国产色蜜蜜麻豆| 国产真实乱偷精品视频免| 日韩av中文字幕一区二区| 国产一区二区精品久久99| 91精品久久久久久蜜臀| 精品播放一区二区| 中文字幕va一区二区三区| 亚洲第一狼人社区| 中文字幕一区二区三区不卡| 精品一区二区三区香蕉蜜桃| 精品国产三级电影在线观看| 国产资源精品在线观看| 一区二区不卡在线视频 午夜欧美不卡在| 国产一区二区三区四区在线观看| 捆绑调教一区二区三区| 日本乱人伦一区| 首页国产欧美日韩丝袜| 色嗨嗨av一区二区三区| 午夜国产不卡在线观看视频| 欧美亚洲图片小说| 制服丝袜av成人在线看| 国产一区二区电影| 亚洲第一在线综合网站| 中文字幕日韩av资源站| 色8久久人人97超碰香蕉987| 国产精品一区2区| 国产成人丝袜美腿| 国产精品视频在线看| 久久综合九色综合97婷婷女人 | 一区二区三区精品在线| 99视频精品全部免费在线| 天堂精品中文字幕在线| 国产精品成人在线观看| 亚洲精品国产视频| 亚洲日本在线天堂| 亚洲大片精品永久免费| 久久99精品一区二区三区三区| 亚洲国产精品久久不卡毛片| 91偷拍与自偷拍精品| 中文字幕欧美国产| 国产精品日产欧美久久久久| 成人福利视频网站| www.亚洲人| 成人开心网精品视频| 欧美日韩小视频| av不卡在线播放| 亚洲五码中文字幕| 亚洲欧美怡红院| 欧美一级一级性生活免费录像| 亚洲日本va午夜在线电影| 国产高清精品网站| 精品日韩欧美在线| 久久国产精品99精品国产| 精品一区二区精品| 欧美这里有精品| 中文字幕乱码日本亚洲一区二区| 亚洲二区在线观看| 国产·精品毛片| 日韩欧美高清在线| 亚洲综合视频在线观看| 国产成+人+日韩+欧美+亚洲| 日韩欧美一卡二卡| 亚洲成av人片在www色猫咪| 91小视频在线免费看| 国产精品色在线观看| 成人午夜激情片| 天天亚洲美女在线视频| 国产成人亚洲综合a∨婷婷| 国产精品久久久久久久岛一牛影视| 一区二区高清在线| 成av人片一区二区| 久久综合色婷婷| 日本成人中文字幕| 欧美美女一区二区三区| 亚洲精品免费在线观看| 99久久精品国产一区| 久久精品夜夜夜夜久久| 狠狠色丁香九九婷婷综合五月| 国产欧美一二三区| 美女网站色91| 日韩欧美亚洲一区二区| 日本sm残虐另类| 欧美高清性hdvideosex| 亚洲18色成人| 日韩一区二区精品葵司在线| 久久精品国内一区二区三区| 精品三级在线看| 美女视频一区二区三区| 精品日韩一区二区| 国产·精品毛片| 视频一区视频二区在线观看| 久久日韩精品一区二区五区| 国产亚洲精品久| 粉嫩高潮美女一区二区三区| 最近日韩中文字幕| 亚洲成人综合视频| 欧美伦理视频网站| 久久国产剧场电影| 久久久久久免费毛片精品| 国产成人免费高清| 亚洲人精品午夜| 欧美午夜寂寞影院| 麻豆91免费看| 国产精品少妇自拍| 色婷婷亚洲婷婷| 日韩激情av在线| 26uuu色噜噜精品一区| 成人激情免费网站| 亚洲线精品一区二区三区 | 久久不见久久见免费视频1| 免费成人在线影院| 久久精品人人做| 91在线观看成人| 日韩高清在线不卡| 国产欧美精品一区二区色综合| 成人av网站免费| 午夜视频一区二区三区| 久久久久久久久伊人| 欧美日韩国产另类不卡| 国产99久久久久| 天堂久久一区二区三区| 中文字幕欧美日韩一区| 69堂国产成人免费视频| 91蜜桃网址入口| 国产成人在线观看免费网站| 午夜成人免费视频| 一区精品在线播放| 欧美剧情片在线观看| 国产suv精品一区二区6| 另类中文字幕网| 午夜欧美在线一二页| 国产精品狼人久久影院观看方式| 欧美日韩你懂得| 91蜜桃网址入口| 91麻豆精品在线观看| 青青草成人在线观看| 亚洲成人综合网站| 亚洲激情图片小说视频| 国产精品久久久久久久裸模| 久久久99精品久久|