专栏首页Michael阿明学习之路[scikit-learn 机器学习] 8. 非线性分类和决策树

[scikit-learn 机器学习] 8. 非线性分类和决策树

本文为 scikit-learn机器学习(第2版)学习笔记

相关知识:《统计学习方法》决策树(Decision Tree,DT)

1. 特征选择标准

  • 信息增益,得知特征X的信息而使得类Y的信息的不确定性减少的程度。
  • 信息增益比,信息增益的占比,选择大的特征
  • 基尼系数,表示经特征 A 分割后集合 D 的不确定性,选择基尼系数小的特征

2. 网页广告预测

import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV

df = pd.read_csv('./ad.data', header=None)
df.head(10)

数据前3列为广告图片的宽高、长宽比,余下特征为文字变量出现频率的编码特征 最后一列为标签列,是否为广告

2.1 数量处理

  • 分离标签
y = df[len(df.columns)-1]
y
0          ad.
1          ad.
2          ad.
3          ad.
4          ad.
         ...  
3274    nonad.
3275    nonad.
3276    nonad.
3277    nonad.
3278    nonad.
Name: 1558, Length: 3279, dtype: object
y = [1 if e == 'ad.' else 0 for e in y]
  • 特征提取
X = df.drop(df.columns[len(df.columns)-1], axis=1)
X
  • 填补无效数据
X.replace(to_replace=' *\?', value=-1,regex=True,inplace=True)
X

2.2 网格搜索模型参数

X_train, X_test, y_train, y_test = train_test_split(X, y)

pipeline = Pipeline([
    ('clf', DecisionTreeClassifier(criterion='entropy'))
])
parameters = {
    'clf__max_depth': (150, 155, 160),
    'clf__min_samples_split': (2, 3),
    'clf__min_samples_leaf': (1, 2, 3)
}

grid_search = GridSearchCV(pipeline, parameters, n_jobs=-1, verbose=1, scoring='f1')
grid_search.fit(X_train, y_train)

best_parameters = grid_search.best_estimator_.get_params()
print('Best score: %0.3f' % grid_search.best_score_)
print('Best parameters set:')
for param_name in sorted(parameters.keys()):
    print('t%s: %r' % (param_name, best_parameters[param_name]))

predictions = grid_search.predict(X_test)
print(classification_report(y_test, predictions))
Best score: 0.890
Best parameters set:
tclf__max_depth: 155
tclf__min_samples_leaf: 2
tclf__min_samples_split: 2
              precision    recall  f1-score   support

           0       0.97      0.99      0.98       716
           1       0.94      0.82      0.88       104

    accuracy                           0.97       820
   macro avg       0.96      0.91      0.93       820
weighted avg       0.97      0.97      0.97       820

看见广告类1的,精准率和召回率都还不错。

3. 决策树优缺点

优点:

  • 不要求对数据进行标准化
  • 可以进行多元分类而无需使用OvO,OvA等策略

缺点:

  • 更容易过拟合,需要剪枝(设置树的最大深度、节点实例数量超过阈值才建立子节点)
  • 本质上是贪心算法,不保证全局最优

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • LeetCode 390. 消除游戏(类似约瑟夫环,找映射规律)

    给定一个从1 到 n 排序的整数列表。 首先,从左到右,从第一个数字开始,每隔一个数字进行删除,直到列表的末尾。 第二步,在剩下的数字中,从右到左,从倒数第...

    Michael阿明
  • 程序员面试金典 - 面试题 16.26. 计算器(栈)

    给定一个包含 正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。

    Michael阿明
  • LeetCode 946. 验证栈序列(栈)

    给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返...

    Michael阿明
  • Shiro系列(1) - 权限管理的介绍与原理

    1. 什么是权限管理 一般来说,只要有用户参与,那么该系统都会需要权限管理,权限管理实现了对用户访问系统 指定功能的限制,按照管理员定义的安全...

    风间影月
  • Asp.Net Web API 2第五课——Web API路由

        Asp.Net Web API第一课——入门 http://www.cnblogs.com/aehyok/p/3432158.html

    aehyok
  • Python也能干大事

    用Python做数值计算,和MATLAB一样简洁方便,关键是Python还是免费的,不用担心版权的问题。下面举几个例子。 1.计算方阵行列式 ? 在Anacon...

    fem178
  • 响铃:“消费茧房”才是拼多多最像今日头条的地方

    马云曾说,他有时候晚上睡不着觉,担心什么东西突然跳出来把阿里给颠覆了。虽然“颠覆”还谈不上,但这几个月来拼多多的出现着实让阿里紧张了一回,也给苦于找不到反制阿里...

    曾响铃
  • wordpress英文主题怎样汉化成中文网站模板

    wordpress应该很多小伙伴使用,国外一款很知名的博客系统,在国内也有很多用户使用。

    用户4831957
  • ERROR 1 (HY000): Can't create/write to file '/data

    MariaDB [temp_archive]> select * from t1 into outfile '/data/test.sql';

    拓荒者
  • 世界海底光缆分布图

    海底光缆是国际互联网的骨架。光缆的多少,代表一国与互联网的联系是否紧密。 有人利用微软的Bing地图,以及wikipedia的数据,做出了一幅互动式的世界海底光...

    ruanyf

扫码关注云+社区

领取腾讯云代金券