資源簡介
完全可編譯通過,python3代碼實現(xiàn),不調庫,純手擼,帶數(shù)據(jù)集。

代碼片段和文件信息
#-*-?coding:?utf-8?-*-
from?random?import?seed
from?random?import?randint
from?csv?import?reader
#?建立一棵CART樹
‘‘‘試探分枝‘‘‘
def?data_split(index?value?dataset):
????left?right?=?list()?list()
????for?row?in?dataset:
????????if?row[index]?????????????left.append(row)
????????else:
????????????right.append(row)
????return?left?right
‘‘‘計算基尼指數(shù)‘‘‘
def?calc_gini(groups?class_values):
????gini?=?0.0
????total_size?=?0
????for?group?in?groups:
????????total_size?+=?len(group)
????for?group?in?groups:
????????size?=?len(group)
????????if?size?==?0:
????????????continue
????????for?class_value?in?class_values:
????????????proportion?=?[row[-1]?for?row?in?group].count(class_value)?/?float(size)
????????????gini?+=?(size?/?float(total_size))?*?(proportion?*?(1.0?-?proportion))
????return?gini
‘‘‘找最佳分叉點‘‘‘
def?get_split(dataset?n_features):
????class_values?=?list(set(row[-1]?for?row?in?dataset))
????b_index?b_value?b_score?b_groups?=?999?999?999?None
????features?=?list()
????while?len(features)?????????index?=?randint(0?len(dataset[0])?-?2)??#?往features添加n_features個特征(n_feature等于特征數(shù)的根號),特征索引從dataset中隨機取
????????if?index?not?in?features:
????????????features.append(index)
????for?index?in?features:
????????for?row?in?dataset:
????????????groups?=?data_split(index?row[index]?dataset)
????????????gini?=?calc_gini(groups?class_values)
????????????if?gini?????????????????b_index?b_value?b_score?b_groups?=?index?row[index]?gini?groups
????return?{‘index‘:?b_index?‘value‘:?b_value?‘groups‘:?b_groups}??#?每個節(jié)點由字典組成
‘‘‘多數(shù)表決‘‘‘
def?to_terminal(group):
????outcomes?=?[row[-1]?for?row?in?group]
????return?max(set(outcomes)?key=outcomes.count)
‘‘‘分枝‘‘‘
def?split(node?max_depth?min_size?n_features?depth):
????left?right?=?node[‘groups‘]
????del?(node[‘groups‘])
????if?not?left?or?not?right:
????????node[‘left‘]?=?node[‘right‘]?=?to_terminal(left?+?right)??#?葉節(jié)點不好理解
????????return
????if?depth?>=?max_depth:
????????node[‘left‘]?node[‘right‘]?=?to_terminal(left)?to_terminal(right)
????????return
????if?len(left)?<=?min_size:
????????node[‘left‘]?=?to_terminal(left)
????else:
????????node[‘left‘]?=?get_split(left?n_features)
????????split(node[‘left‘]?max_depth?min_size?n_features?depth?+?1)
????if?len(right)?<=?min_size:
????????node[‘right‘]?=?to_terminal(right)
????else:
????????node[‘right‘]?=?get_split(right?n_features)
????????split(node[‘right‘]?max_depth?min_size?n_features?depth?+?1)
‘‘‘建立一棵樹‘‘‘
def?build_one_tree(train?max_depth?min_size?n_features):
????root?=?get_split(train?n_features)
????split(root?max_depth?min_size?n_features?1)
????return?root
‘‘‘用森林里的一棵樹來預測‘‘‘
def?predict(node?row):
????if?row[node[‘index‘]]?????????if?isinstance(node[‘left‘]?dict):
????????????return?predict(node[‘left‘]?row)
????????else:
????????????return?node[‘left‘]
????else:
????????if?isinstance(node[‘right‘]?dict):
????????????return?predict(node[‘right‘]?row)
????????el
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-12-18?02:24??myRF\
?????文件???????86084??2017-03-17?03:29??myRF\sonar-all-data.csv
?????文件????????6565??2018-12-18?02:24??myRF\myRF.py
?????目錄???????????0??2018-12-18?02:21??myRF\venv\
?????文件??????????69??2018-12-18?02:21??myRF\venv\pyvenv.cfg
?????目錄???????????0??2018-12-18?02:51??myRF\.idea\
?????文件?????????466??2018-12-18?02:21??myRF\.idea\myRF.iml
?????文件?????????260??2018-12-18?02:21??myRF\.idea\modules.xm
?????文件?????????192??2018-12-18?02:21??myRF\.idea\misc.xm
?????文件????????7004??2018-12-18?02:51??myRF\.idea\workspace.xm
?????目錄???????????0??2018-12-18?02:21??myRF\venv\bin\
?????文件?????????395??2018-12-18?02:21??myRF\venv\bin\pip
?????文件?????????397??2018-12-18?02:21??myRF\venv\bin\pip3
?????文件?????????401??2018-12-18?02:21??myRF\venv\bin\pip3.5
?????文件?????????434??2018-12-18?02:21??myRF\venv\bin\easy_install
?????文件?????????442??2018-12-18?02:21??myRF\venv\bin\easy_install-3.5
?????文件????????2405??2018-12-18?02:21??myRF\venv\bin\activate.fish
?????文件????????2151??2018-12-18?02:21??myRF\venv\bin\activate
?????文件????????1267??2018-12-18?02:21??myRF\venv\bin\activate.csh
?????文件?????4464368??2018-12-18?02:21??myRF\venv\bin\python3
?????文件?????4464368??2018-12-18?02:21??myRF\venv\bin\python
?????文件?????4464368??2018-12-18?02:21??myRF\venv\bin\python3.5
?????文件???????????3??2018-12-18?02:21??myRF\venv\lib64
?????目錄???????????0??2018-12-18?02:21??myRF\venv\include\
?????目錄???????????0??2018-12-18?02:21??myRF\venv\lib64\python3.5\
?????目錄???????????0??2018-12-18?02:21??myRF\venv\lib64\python3.5\site-packages\
?????文件??????????30??2018-12-18?02:21??myRF\venv\lib64\python3.5\site-packages\setuptools.pth
?????文件??????????53??2018-12-18?02:21??myRF\venv\lib64\python3.5\site-packages\easy-install.pth
?????文件??????563197??2018-12-18?02:21??myRF\venv\lib64\python3.5\site-packages\setuptools-39.1.0-py3.5.egg
?????目錄???????????0??2018-12-18?02:21??myRF\venv\lib64\python3.5\site-packages\pip-10.0.1-py3.5.egg\
?????目錄???????????0??2018-12-18?02:21??myRF\venv\lib64\python3.5\site-packages\pip-10.0.1-py3.5.egg\pip\
............此處省略334個文件信息
評論
共有 條評論