機器學習實踐(十) sklearn之決策樹

2021-09-01 19:46:09 字數 3532 閱讀 1702

公式h(x

)=∑i

=1np

(xi)

i(xi

)=−∑

i=1n

p(xi

)log

2p(x

i)

h(x) = \sum_^p(x_i)i(x_i) = - \sum_^p(x_i)log_2p(x_i)

h(x)=i

=1∑n

​p(x

i​)i

(xi​

)=−i

=1∑n

​p(x

i​)l

og2​

p(xi

​)

來自《數學之美》

示例助解

舉乙個的例子:對遊戲活躍使用者進行分層,分為高活躍、中活躍、低活躍,遊戲a按照這個方式劃分,使用者比例分別為20%,30%,50%。遊戲b按照這種方式劃分,使用者比例分別為5%,5%,90%。那麼遊戲a對於這種劃分方式的熵為:

h (a

)=−(

0.2∗lo

g2

0.2+

0.3∗lo

g2

0.3+

0.5∗lo

g2

0.5)

=1.485

h(a) = -(0.2*log_0.2+0.3*log_0.3+0.5*log_0.5) = 1.485

h(a)=−

(0.2

∗log

2​0.

2+0.

3∗lo

g2​0

.3+0

.5∗l

og2​

0.5)

=1.4

85同理遊戲b對於這種劃分方式的熵為:

h (b

)=−(

0.05∗l

og

20.05

+0.05∗l

og

20.05

+0.9∗l

og

20.9)=

0.569

h(b) = -(0.05*log_0.05+0.05*log_0.05+0.9*log_0.9) = 0.569

h(b)=−

(0.0

5∗lo

g2​0

.05+

0.05

∗log

2​0.

05+0

.9∗l

og2​

0.9)

=0.5

69遊戲a的熵比遊戲b的熵大,所以遊戲a的不確定性比遊戲b高。用簡單通俗的話來講,遊戲b要不就在上公升期,要不就在衰退期,它的未來已經很確定了,所以熵低。而遊戲a的未來有更多的不確定性,它的熵更高。

h (d

∣a)=

∑i=1

n∣di

∣∣d∣

h(di

)=−∑

i=1n

∣di∣

∣d∣∑

k=1k

∣dik

∣∣di

∣log

∣dik

∣∣di

∣h(d|a)=\sum_^\frach(d_i)=- \sum_^\frac\sum^_\frac|}log\frac|}

h(d∣a)

=i=1

∑n​∣

d∣∣d

i​∣​

h(di

​)=−

i=1∑

n​∣d

∣∣di

​∣​k

=1∑k

​∣di

​∣∣d

ik​∣

​log

∣di​

∣∣di

k​∣​

注:

這句話應該有點毛病,太繞了,沒有理解透,馬上補,然後再回來修改

決策樹的原理不止資訊增益這一種,還有其他方法。

c4.5

cart

class sklearn.tree.decisiontreeclassifier(criterion=』gini』, max_depth=none,random_state=none)

max_depth

random_state

gini - 基尼係數

資料:

步驟分析

完整**

import pandas as pd

from sklearn.feature_extraction import dictvectorizer

from sklearn.model_selection import train_test_split

from sklearn.tree import decisiontreeclassifier

# 獲取資料

tanic=pd.read_csv(

"")tanic.head(

)# 資料預處理,填充缺失值

tanic[

'age'

].fillna(tanic[

'age'

].mean(

),inplace=

true

)# 提取特徵值,目標值

x=tanic[

['pclass'

,'age'

,'***']]

y=tanic[

'survived'

]# 特徵工程,字典特徵提取

transfer=dictvectorizer(sparse=

false

)x=transfer.fit_transform(x.to_dict(orient=

"records"))

# 資料集劃分

x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=

0.3)

# 模型訓練

# 1> 例項化乙個轉換器

estimator=decisiontreeclassifier(

)# 2> 進行機器學習

estimator.fit(x_train,y_train)

# 模型評估

# 方法1,比較真實值與**值

y_predict=estimator.predict(x_test)

print

("**值為:\n"

,y_predict)

print

("比較真實值與**值結果為:\n"

,y_predict==y_test)

# 方法2,計算模型準確率

print

("模型準確率為:\n"

,estimator.score(x_test,y_test)

)

缺點

機器學習實踐(一) sklearn之概述

1956年,人工智慧元年。人類能夠創造出人類還未知的東西。這未知的東西人類能夠保證它不誤入歧途嗎。影象領域 自然語言處理領域 定義 解釋例子演算法分類 無監督學習 unsupervised learning 示例 特徵值 房屋的各個屬性資訊 目標值 房屋 連續型資料 特徵值 人物的各個屬性資訊 目標...

機器學習入門之sklearn

原始碼 from sklearn.datasets import load iris from sklearn.model selection import train test split def datasets demo sklearn資料集使用 return 獲取資料集 iris load ...

機器學習之Sklearn庫

sklearn庫是在numpy scipy和matplotlib的基礎上開發而成的,因此在介紹sklearn的安裝前,需要先安裝這些依賴庫。numpy是乙個開源的python科學計算庫。scipy庫是sklearn庫的基礎,它是基於numpy的乙個整合了多種數學演算法和函式的python模組。mat...