• 大小: 7.59MB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2023-11-18
  • 语言: Python
  • 标签: 机器学习  算法  

资源简介

完全可编译通过,python3代码实现,不调库,纯手撸,带数据集。

资源截图

代码片段和文件信息

#-*- 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] < value:
            left.append(row)
        else:
            right.append(row)
    return left right

‘‘‘计算基尼指数‘‘‘
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) < n_features:
        index = randint(0 len(dataset[0]) - 2)  # 往features添加n_features个特征(n_feature等于特征数的根号),特征索引从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_score:
                b_index b_value b_score b_groups = index row[index] gini groups
    return {‘index‘: b_index ‘value‘: b_value ‘groups‘: b_groups}  # 每个节点由字典组成

‘‘‘多数表决‘‘‘
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)  # 叶节点不好理解
        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‘]] < node[‘value‘]:
        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.xml
     文件         192  2018-12-18 02:21  myRF\.idea\misc.xml
     文件        7004  2018-12-18 02:51  myRF\.idea\workspace.xml
     目录           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个文件信息

评论

共有 条评论