91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python決策樹算法怎么實現

發布時間:2021-05-14 09:51:13 來源:億速云 閱讀:158 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關python決策樹算法怎么實現,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

1、步驟

計算數據集S中的每個屬性的熵 H(xi)

選取數據集S中熵值最小(或者信息增益最大,兩者等價)的屬性

在決策樹上生成該屬性節點

使用剩余結點重復以上步驟生成決策樹的屬性節點

2、實例

import numpy as np
import math
from collections import Counter
 
# 創建數據
def create_data():
    X1 = np.random.rand(50, 1)*100
    X2 = np.random.rand(50, 1)*100
    X3 = np.random.rand(50, 1)*100
    
    def f(x):
        return 2 if x > 70 else 1 if x > 40 else 0
    
    y = X1 + X2 + X3
    Y = y > 150
    Y = Y + 0
    r = map(f, X1)
    X1 = list(r)
    
    r = map(f, X2)
    X2 = list(r)
    
    r = map(f, X3)
    X3 = list(r)
    x = np.c_[X1, X2, X3, Y]
    return x, ['courseA', 'courseB', 'courseC']
 
 
# 計算集合信息熵的函數
def calculate_info_entropy(dataset):
    n = len(dataset)
    # 我們用Counter統計一下Y的數量
    labels = Counter(dataset[:, -1])
    entropy = 0.0
    # 套用信息熵公式
    for k, v in labels.items():
        prob = v / n
        entropy -= prob * math.log(prob, 2)
    return entropy
 
# 實現拆分函數
def split_dataset(dataset, idx):
   # idx是要拆分的特征下標
    splitData = defaultdict(list)
    for data in dataset:
       # 這里刪除了idx這個特征的取值,因為用不到了
        splitData[data[idx]].append(np.delete(data, idx))
    return list(splitData.values()), list(splitData.keys())
 
# 實現特征的選擇函數
def choose_feature_to_split(dataset):
    n = len(dataset[0])-1
    m = len(dataset)
    # 切分之前的信息熵
    entropy = calculate_info_entropy(dataset)
    bestGain = 0.0
    feature = -1
    for i in range(n):
       # 根據特征i切分
        split_data, _ = split_dataset(dataset, i)
        new_entropy = 0.0
        # 計算切分后的信息熵
        for data in split_data:
            prob = len(data) / m
            new_entropy += prob * calculate_info_entropy(data)
        # 獲取信息增益
        gain = entropy - new_entropy
        if gain > bestGain:
            bestGain = gain
            feature = i
    return feature
 
# 決策樹創建函數
def create_decision_tree(dataset, feature_names):
    dataset = np.array(dataset)
    counter = Counter(dataset[:, -1])
    # 如果數據集值剩下了一類,直接返回
    if len(counter) == 1:
        return dataset[0, -1]
    
    # 如果所有特征都已經切分完了,也直接返回
    if len(dataset[0]) == 1:
        return counter.most_common(1)[0][0]
    
    # 尋找最佳切分的特征
    fidx = choose_feature_to_split(dataset)
    fname = feature_names[fidx]
    
    node = {fname: {}}
    feature_names.remove(fname)
    
    # 遞歸調用,對每一個切分出來的取值遞歸建樹
    split_data, vals = split_dataset(dataset, fidx)
    for data, val in zip(split_data, vals):
        node[fname][val] = create_decision_tree(data, feature_names[:])
    return node
 
# 決策樹節點預測函數
def classify(node, feature_names, data):
   # 獲取當前節點判斷的特征
    key = list(node.keys())[0]
    node = node[key]
    idx = feature_names.index(key)
    
    # 根據特征進行遞歸
    pred = None
    for key in node:
       # 找到了對應的分叉
        if data[idx] == key:
           # 如果再往下依然還有子樹,那么則遞歸,否則返回結果
            if isinstance(node[key], dict):
                pred = classify(node[key], feature_names, data)
            else:
                pred = node[key]
                
    # 如果沒有對應的分叉,則找到一個分叉返回
    if pred is None:
        for key in node:
            if not isinstance(node[key], dict):
                pred = node[key]
                break
    return pred

python有哪些常用庫

python常用的庫:1.requesuts;2.scrapy;3.pillow;4.twisted;5.numpy;6.matplotlib;7.pygama;8.ipyhton等。

關于“python決策樹算法怎么實現”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

毕节市| 凤山县| 建阳市| 青海省| 邮箱| 六盘水市| 托克逊县| 大竹县| 万源市| 佳木斯市| 北京市| 新宁县| 梅河口市| 美姑县| 镶黄旗| 海口市| 静宁县| 大田县| 博罗县| 琼中| 龙岩市| 桂平市| 稻城县| 永德县| 剑河县| 南宫市| 额尔古纳市| 葫芦岛市| 河池市| 巴马| 错那县| 郁南县| 鱼台县| 丰都县| 苍南县| 山阴县| 华阴市| 济阳县| 孟村| 仙桃市| 奎屯市|