首页人工智能Scikit-learn6.使用决策树模型识别鸢尾...

6.使用决策树模型识别鸢尾花

1.决策树模型:

是一个利用像树一样的图形或决策模型的决策支持工具。结构如下:

  • 叶子节点:决策结果(预测类别);
  • 非叶子节点:分割点(某个特征上的测试)。

1.1 基本原理:

从根节点开始,计算所有特征值的信息增益,选择计算结果最大的特征作为根节点;
根据算出的特征建立子节点,执行第一步,直到所有特征的信息增益很小或没有特征可以选择为止。

1.2 信息增益:

一个特征能过为分类系统带来多少信息,带来的信息越多,该特征越重要。

1.3 在sklearn中使用决策树:

DecisionTreeClassfier(),包含如下重要参数:
max_depth——树的最大深度,最常用于减少模型复杂度,防止过拟合的参数;
min_samples_leaf——每个叶子拥有的最少的样本个数;
max_leaf_nodes——树中叶子的最大个数;
实际应用中,通常只需要调整max_depth就已足够防止决策树模型的过拟合。

2.代码:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

data_file = './data/Iris.csv'

CATEGRORY_LABEL_DICT = {
        'Iris-setosa':      0,  # 山鸢尾
        'Iris-versicolor':  1,  # 变色鸢尾
        'Iris-virginica':   2   # 维吉尼亚鸢尾
    }

# 使用的特征列
FEAT_COLS = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm']


def main():
    """
        主函数
    """
    iris_data = pd.read_csv(data_file, index_col='Id')

    # 添加label一列作为预测标签
    iris_data['Label'] = iris_data['Species'].apply(lambda category_name: CATEGRORY_LABEL_DICT[category_name])

    # 4列花的属性作为样本特征
    X = iris_data[FEAT_COLS].values
    # label列为样本标签
    y = iris_data['Label'].values

    # 将原始数据集拆分成训练集和测试集,测试集占总样本数的1/3
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, random_state=10)

    # 构建模型
    max_depth_list = [2, 3, 4]
    for max_depth in max_depth_list:
        dt_model = DecisionTreeClassifier(max_depth=max_depth)
        dt_model.fit(X_train, y_train)

        train_acc = dt_model.score(X_train, y_train)
        test_acc = dt_model.score(X_test, y_test)

        print('max_depth={}时:'.format(max_depth) )
        print('训练集上的准确率为:{:.2f}%'.format(train_acc * 100))
        print('测试集上的准确率为:{:.2f}%'.format(test_acc * 100))


if __name__ == '__main__':
    main()

3.输出结果:

max_depth=2时:
训练集上的准确率为:97.00%
测试集上的准确率为:92.00%
max_depth=3时:
训练集上的准确率为:98.00%
测试集上的准确率为:92.00%
max_depth=4时:
训练集上的准确率为:100.00%
测试集上的准确率为:90.00%
RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments