成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

分類算法之決策樹(shù)(應(yīng)用篇)

luoyibu / 3329人閱讀

摘要:起步在理論篇我們介紹了決策樹(shù)的構(gòu)建和一些關(guān)于熵的計(jì)算方法,這篇文章將根據(jù)一個(gè)例子,用代碼上來(lái)實(shí)現(xiàn)決策樹(shù)。轉(zhuǎn)化文件至可視化決策樹(shù)的命令得到一個(gè)文件,打開(kāi)可以看到?jīng)Q策樹(shù)附錄本次應(yīng)用的全部代碼向量化向量化構(gòu)造決策樹(shù)保存模型測(cè)試數(shù)據(jù)

起步

在理論篇我們介紹了決策樹(shù)的構(gòu)建和一些關(guān)于熵的計(jì)算方法,這篇文章將根據(jù)一個(gè)例子,用代碼上來(lái)實(shí)現(xiàn)決策樹(shù)。

實(shí)驗(yàn)環(huán)境

操作系統(tǒng): win10 64

編程語(yǔ)言: Python3.6

用到的第三方模塊有:

numpy (1.12.1+mkl)
scikit-learn (0.19.1)
數(shù)據(jù)源

為了方便理解和架設(shè),我們用理論篇中買電腦的例子:

將這些記錄保存成 csv 文件:

RID,age,income,student,credit_rating,class:buys_computer
1,youth,hight,no,fair,no
2,youth,hight,no,excellent,no
3,middle_aged,hight,no,fair,yes
4,senior,medium,no,fair,yes
5,senior,low,yes,fair,yes
6,senior,low,yes,excellent,no
7,middle_aged,low,yes,excellent,yes
8,youth,medium,no,fair,no
9,youth,low,yes,fair,yes
10,senior,medium,yes,fair,yes
11,youth,medium,yes,excellent,yes
12,middle_aged,medium,no,excellent,yes
13,middle_aged,hight,yes,fair,yes
14,senior,medium,no,excellent,no

這些數(shù)據(jù)就是這次應(yīng)用的數(shù)據(jù)源。

數(shù)據(jù)整理

可以利用python標(biāo)準(zhǔn)庫(kù)中 csv 來(lái)對(duì)這個(gè)數(shù)據(jù)源進(jìn)行讀取,要對(duì)原始數(shù)據(jù)集進(jìn)行整理,隨機(jī)變量放在一個(gè)數(shù)組,分類結(jié)果放在另一個(gè)數(shù)組,形如:

future_list = [
    {
        "age"   : "youth",
        "income": "hight",
        ...
    }
    ...
]

answer_list = ["no", "no", "yes", ...]

按照這個(gè)思路我們構(gòu)造一下:

data_file = open("computer_buy.csv", "r")
reader = csv.reader(data_file)
headers = next(reader)

future_list = []
label_list = []

for row in reader:
    label_list.append(row[-1])
    row_dict = {}
    for i in range(1, len(row) -1):
        row_dict[ headers[i] ] = row[i]
    future_list.append(row_dict)
data_file.close()
隨機(jī)變量向量化

sklearn 提供的庫(kù)中,對(duì)輸入的特征有一定的要求,所有特征和分類都要是數(shù)值型的值,不能是例子中的類別的值。

怎么轉(zhuǎn)化呢?
比方說(shuō) age 這個(gè)特征,它有三個(gè)值: youth , middle_aged , senior 。有一條記錄的 age=youth 針對(duì)這個(gè)特征我們就變成:

youth middle_aged senior
1 0 0

那么第一條記錄 youth,hight,no,fair 轉(zhuǎn)化為:

age=middle_aged age=senior age=youth credit_rating=excellent credit_rating=fair income=hight income=low income=medium student=no student=yes
0 0 1 0 1 1 0 0 1 0
特征向量化
from sklearn.feature_extraction import DictVectorizer
dummy_x = vec.fit_transform(future_list).toarray()

print("dummy_x:", dummy_x)
print("vec.get_feature_names()", vec.get_feature_names())
分類結(jié)果向量化
from sklearn import preprocessing
lb = preprocessing.LabelBinarizer()
dummy_y = lb.fit_transform(label_list)
構(gòu)造決策樹(shù)

sklearn 中提供了多種決策樹(shù)構(gòu)建方法,這邊需要向其表明,是依據(jù) 信息增益 的方式來(lái)構(gòu)造決策樹(shù)的,因此需要傳入一個(gè)參數(shù)
criterion="entropy":

from sklearn import tree
# 構(gòu)造決策樹(shù)
clf = tree.DecisionTreeClassifier(criterion="entropy")
clf.fit(dummy_x, dummy_y)

print("clf: ", clf)
保存模型

將訓(xùn)練好的模型保存到文件里去:

# 保存模型
with open("result.dot", "w") as f:
    tree.export_graphviz(clf, feature_names=vec.get_feature_names(), out_file=f)
測(cè)試數(shù)據(jù)

接下來(lái)就是給它隨機(jī)變量,讓決策樹(shù)來(lái)進(jìn)行分類。我們修改第一條記錄來(lái)進(jìn)行測(cè)試:

# 測(cè)試數(shù)據(jù)
first_row = dummy_x[0, :]
new_row = list(first_row)
new_row[0] = 1
new_row[2] = 0

predict = clf.predict([new_row])

print("predict:", predict) # output: [1]
模型可視化

可視化用到了 Graphviz 軟件,可以到官網(wǎng):http://www.graphviz.org/ 下載,我下載的是 zip 文件,解壓后將目錄加到環(huán)境變量中去。

轉(zhuǎn)化 dot 文件至 pdf 可視化決策樹(shù)的命令:

dot -Tpdf result.dot -o outpu.pdf

得到一個(gè)pdf文件,打開(kāi)可以看到?jīng)Q策樹(shù):

附錄

本次應(yīng)用的全部代碼:

# coding: utf-8
import csv
from sklearn.feature_extraction import DictVectorizer
from sklearn import preprocessing
from sklearn import tree

data_file = open("computer_buy.csv", "r")
reader = csv.reader(data_file)
headers = next(reader)

future_list = []
label_list = []

for row in reader:
    label_list.append(row[-1])
    row_dict = {}
    for i in range(1, len(row) -1):
        row_dict[ headers[i] ] = row[i]
    future_list.append(row_dict)
data_file.close()

# 向量化 x
vec = DictVectorizer()
dummy_x = vec.fit_transform(future_list).toarray()

print("dummy_x:", dummy_x)
print("vec.get_feature_names()", vec.get_feature_names())

# 向量化 y
lb = preprocessing.LabelBinarizer()
dummy_y = lb.fit_transform(label_list)

# 構(gòu)造決策樹(shù)
clf = tree.DecisionTreeClassifier(criterion="entropy")
clf.fit(dummy_x, dummy_y)

print("clf: ", clf)

# 保存模型
with open("result.dot", "w") as f:
    tree.export_graphviz(clf, feature_names=vec.get_feature_names(), out_file=f)

# 測(cè)試數(shù)據(jù)
first_row = dummy_x[0, :]
new_row = list(first_row)
new_row[0] = 1
new_row[2] = 0

predict = clf.predict([new_row])
print("predict:", predict)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/44524.html

相關(guān)文章

  • 分類算法決策樹(shù)(理論

    摘要:后剪枝先創(chuàng)建完整的決策樹(shù),然后再嘗試消除多余的節(jié)點(diǎn),也就是采用減枝的方法。 起步 決策樹(shù)(decision tree)是一個(gè)樹(shù)結(jié)構(gòu),可以是二叉樹(shù)或非二叉樹(shù),也可以把他看作是 if-else 規(guī)則的集合,也可以認(rèn)為是在特征空間上的條件概率分布。 決策樹(shù)的結(jié)構(gòu) 以一個(gè)簡(jiǎn)單的用于是否買電腦預(yù)測(cè)的決策樹(shù)為例子: showImg(https://segmentfault.com/img/remo...

    jzzlee 評(píng)論0 收藏0
  • 隨機(jī)森林算法入門(python)

    摘要:翻譯自昨天收到推送了一篇介紹隨機(jī)森林算法的郵件,感覺(jué)作為介紹和入門不錯(cuò),就順手把它翻譯一下。隨機(jī)森林引入的隨機(jī)森林算法將自動(dòng)創(chuàng)建隨機(jī)決策樹(shù)群?;貧w隨機(jī)森林也可以用于回歸問(wèn)題。結(jié)語(yǔ)隨機(jī)森林相當(dāng)起來(lái)非常容易。 翻譯自:http://blog.yhat.com/posts/python-random-forest.html 昨天收到y(tǒng)hat推送了一篇介紹隨機(jī)森林算法的郵件,感覺(jué)作為介紹和入門...

    張遷 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<