机器学习项目实战——09决策树算法之叶子分类

数据集中

species类别,64个margin边缘特征,64个shape形状特征,64个texture质感特征

构建的是默认的决策树模型

整体代码:

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection  import GridSearchCV

train = pd.read_csv('train.csv')

print(train.head())
# species类别,64个margin边缘特征,64个shape形状特征,64个texture质感特征

print(train.shape)
# (990, 194)

# 叶子类别数
print(len(train.species.unique()))
# 99

# 把字符串类别转化为数字形式
lb = LabelEncoder().fit(train.species)
labels = lb.transform(train.species)
# 去掉'species', 'id'的列
data = train.drop(['species', 'id'], axis=1)
print(data.head())

print(labels[:5])



# 切分数据集
x_train,x_test,y_train,y_test = train_test_split(data, labels, test_size=0.3, stratify=labels)

# 建模分析
tree = DecisionTreeClassifier()
tree.fit(x_train, y_train)

print(tree.score(x_test, y_test))
# 0.6262626262626263

print(tree.score(x_train, y_train))
# 1.0


# 模型优化
# max_depth:树的最大深度
# min_samples_split:内部节点再划分所需最小样本数
# min_samples_leaf:叶子节点最少样本数
param_grid = {'max_depth': [30,40,50,60,70],
                    'min_samples_split': [2,3,4,5,6],
                    'min_samples_leaf':[1,2,3,4]}
# 网格搜索
model = GridSearchCV(DecisionTreeClassifier(), param_grid, cv=3)
model.fit(x_train, y_train)
print(model.best_estimator_)

print(model.score(x_train, y_train))
#0.9264069264069265

print(model.score(x_test, y_test))
#0.6060606060606061


# 有可能模型优化后效果并不好

对于模型的优化,

如果不限制决策树的参数,很容易出现过拟合。

决策树的参数经常用的是:# max_depth:树的最大深度、 # min_samples_split:内部节点再划分所需最小样本数、 # min_samples_leaf:叶子节点最少样本数

一般来说调参以后正确率会提高。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值