我们使用决策树来创建一个能屏蔽网页横幅广告的软件。

已知图片的数据判断它属于广告还是文章内容。

数据来自 http://archive.ics.uci.edu/ml/datasets/Internet+Advertisements

其中包含3279张图片的数据,该数据集中的类的比例是不均衡的,459张图片是广告,零位2820张图片是文章内容。

首先导入数据,数据预处理

# -*- coding: utf-8 -*-
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-dataset/ad.data',header=None) variable_col = set(df.columns.values) #共有几列
variable_col.remove(len(df.columns.values)-1) #最后一列是标签
label_col= df[len(df.columns.values)-1] #把标签列取出来 y = [1 if e=='ad.' else 0 for e in label_col] #把标签转为数值
X = df[list(variable_col)].copy() #把前面的所有列作为X
X.replace(to_replace=' *?',value=-1,regex=True,inplace=True) #数据中的缺失值是 *?,我们用-1替换缺失值
X_train,X_test,y_train,y_test = train_test_split(X,y)

建立决策树,网格搜索微调模型

# In[1] 网格搜索微调模型
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)
}
#GridSearchCV 用于系统地遍历多种参数组合,通过交叉验证确定最佳效果参数。
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("最好的F1值为:",grid_search.best_score_)
print('最好的参数为:')
for param_name in sorted(parameters.keys()):
print('t%s: %r' % (param_name,best_parameters[param_name]))
最好的F1值为: 0.8753026365252053
最好的参数为:
tclf__max_depth: 160
tclf__min_samples_leaf: 1
tclf__min_samples_split: 3

评价模型

# In[2] 输出预测结果并评价
predictions = grid_search.predict(X_test)
print(classification_report(y_test,predictions))
              precision    recall  f1-score   support

           0       0.98      0.99      0.98       695
1 0.93 0.89 0.91 125 micro avg 0.97 0.97 0.97 820
macro avg 0.95 0.94 0.94 820
weighted avg 0.97 0.97 0.97 820

scikit-learn机器学习(四)使用决策树做分类的更多相关文章

  1. scikit-learn机器学习(四)使用决策树做分类,并画出决策树,随机森林对比

    数据来自 UCI 数据集 匹马印第安人糖尿病数据集 载入数据 # -*- coding: utf-8 -*- import pandas as pd import matplotlib matplot ...

  2. (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探

    目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...

  3. Scikit Learn: 在python中机器学习

    转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...

  4. scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)

    scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...

  5. (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探

    一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...

  6. Python机器学习笔记 使用sklearn做特征工程和数据挖掘

    特征处理是特征工程的核心部分,特征工程是数据分析中最耗时间和精力的一部分工作,它不像算法和模型那样式确定的步骤,更多的是工程上的经验和权衡,因此没有统一的方法,但是sklearn提供了较为完整的特征处 ...

  7. 基于机器学习和TFIDF的情感分类算法,详解自然语言处理

    摘要:这篇文章将详细讲解自然语言处理过程,基于机器学习和TFIDF的情感分类算法,并进行了各种分类算法(SVM.RF.LR.Boosting)对比 本文分享自华为云社区<[Python人工智能] ...

  8. javascript实现朴素贝叶斯分类与决策树ID3分类

    今年毕业时的毕设是有关大数据及机器学习的题目.因为那个时间已经步入前端的行业自然选择使用JavaScript来实现其中具体的算法.虽然JavaScript不是做大数据处理的最佳语言,相比还没有优势,但 ...

  9. CART决策树(分类回归树)分析及应用建模

    一.CART决策树模型概述(Classification And Regression Trees)   决策树是使用类似于一棵树的结构来表示类的划分,树的构建可以看成是变量(属性)选择的过程,内部节 ...

随机推荐

  1. 文件格式 rdp

    auto connect:i:1full address:s:公网访问IP地址username:s:Administrator

  2. java8大基本类型

    文章转载自:Java的8种基本数据类型 请阅读原文. 关于Java的8种基本数据类型,其名称.位数.默认值.取值范围及示例如下表所示: 序号 数据类型 位数 默认值 取值范围 举例说明 1 byte( ...

  3. Window脚本学习笔记之BAT文件处理

    BAT文件处理 列出盘中特定文件名的文件: @echo offdir C:\*.jpg /b/s>.\CDatejpg.txt dir C:\*.png /b/s>.\CDatepng.t ...

  4. metal tile shader

    刚发现了个问题 tileshader的memory不需要和attachement对应 imageblock被tileshader读写 fragmentshader也可以写imageblock 还可以正 ...

  5. JavaEE企业面试问题之Java基础部分

    1. Java基础部分 1.1 Java中的方法覆盖(Override)和方法重载(Overload)是什么意思? 重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不 ...

  6. C# 加载显示ftp上图片方法

    ftp://用户名:密码@IP/路径 FTP的一种登陆方式  如ftp://sing:song@192.168.1.133/upload/pic/236.jpg

  7. Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) D. Power Products

    链接: https://codeforces.com/contest/1247/problem/D 题意: You are given n positive integers a1,-,an, and ...

  8. 10、Spring Boot 2.x 集成 Log4j2

    1.10 Spring Boot 2.x 集成 Log4j2 完整源码: Spring-Boot-Demos

  9. P5358 [SDOI2019]快速查询

    思路:...乱搞数据结构?? 提交:1次 题解: 观察到除了单点就是全局操作,所以我们维护一个全局加法标记add和乘法标记mul和答案sum. 单点修改时,比如我们要把 \(pos\) 位置改成 \( ...

  10. 009_STM32程序移植之_内部falsh

    flash  模拟  EEPROM  实验 1. 测试环境:STM32C8T6 2. 测试接口: 3. 串口使用串口一,波特率9600 单片机引脚------------CH340引脚 VCC---- ...