机器学习_相亲数据决策树实战

需求:根据训练集预测是否要见相亲对象
机器学习处理问题流程:
1.准备数据,导入数据集
2.数据探索性分析,EDA分析
3.特征工程(数据处理、特征的预处理)
4.数据切分:训练集+测试集,训练集占比例高的
5.模型训练(训练集+机器学习算法—决策树算法)
6.利用测试数据进行预测—通过测试数据X灌入算法中得到一个预测值Y1
7.|Y-Y1|误差,模型训练过程中使得模型的误差变小
8.模型评价:准确率、错误率、误差

1.准备数据,这里的数据已经完成了123步骤,文件名为SklearnTest.txt
特征分别为height,house,car,handsome,job,类标签为is_date 表示是否约会,其中0表示不约,1表示约,-1则是我们需要预测是否约会的标记

height,house,car,handsome,job,is_date
1.80,1,0,6.5,2,1
1.62,1,0,5.5,0,1
1.71,0,1,8.5,1,1
1.58,1,1,6.3,1,1
1.68,0,1,5.1,0,0
1.63,1,0,5.3,1,0
1.78,0,0,4.5,0,0
1.64,0,0,7.8,2,0
1.65,0,1,6.6,0,-1

读取数据集

import pandas as pd#调用NUMPy里强大的数据处理库padndas 起别名pd
df = pd.read_csv("SklearnTest.txt")#读取csv文件为DataFrame类型

4.数据切分:训练集+测试集
注:训练集和测试集一般比例为82分

train=df.query("is_date!=-1")#创建是否约会不等于-1的训练集
test=df.query("is_date==-1")#创建是否约会为-1的测试集
#进一步提取X和y(这里的x和y其实就是我们初中学的类似2x=y x是变量 y是值)
#对训练数据和测试数据进行进一步处理
y_train=train["is_date"]#训练集的值为是否约会
x_train=train.drop(["is_date"],axis=1)#axis=1代表按照列进行删除,训练集的x为删除是否约会的类标签
print (y_train)#打印训练集值y在控制台上
print (x_train)#打印训练集变量x在控制台上
#对测试数据进行处理
y_test=test["is_date"]#定义测试集y
x_test=test.drop(["is_date"],axis=1)#定义测试集x

5.模型训练(这里调用的是决策树分类器算法)

#准备决策树算法进行预测
from sklearn.tree import DecisionTreeClassifier#导入算法
dtc=DecisionTreeClassifier()#初始化
dtc.fit(x_train,y_train)#把训练集的x和y扔进去进行训练,从而得到模型

6.利用测试数据进行预测

y_pred=dtc.predict(x_test)#利用模型进行预测
print (y_pred)#打印预测值

决策树可视化展示

from sklearn.tree import export_graphviz#调用graphviz工具生成文件
export_graphviz(dtc.tree_,out_file="love.dot",filled=True,feature_names=df.columns,class_names=["is_data:no","is_Date:yes"])
#参数分别为类型,输出文件名,是否填充,以及将是否约会的结果01进行置换为"不约","约"

可视化展示需要去graphviz官网去下载文件
在这里插入图片描述
然后进行安装配置
然后进入love.dot所在的位置,按住Ctrl+Shift+鼠标右键即可打开graphviz命令窗口.
使用命令生成相对应的文件png为图片,pdf为文档
在这里插入图片描述
打开文件查看可视化图片
在这里插入图片描述
附:
决策树api文档资料
1.分类决策树 SKlearn 的 API 介绍
详情可以使用谷歌浏览器打开网址
决策树文档:http://scikit-learn.org/stable/modules/tree.html#classification 决策树分类器的简介: http://scikitlearn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.ht ml#sklearn.tree.DecisionTreeClassifier Class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, splitter=’best’, max_depth=None, min_samples_split=2,min_samples_leaf=1,min_weight_fraction_leaf=0.0, max_features=None, random_state=None,max_leaf_nodes=None,min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)[source]¶
接下来分别分析参数
2.API 的参数详解
(1)criterion:一个字符串,指定切分质量的评价准则。可以为如下两个参数: Gini:表示切分时评价准则时 Gini 系数。 Entropy:表示切分的时候评价准则是熵
(2)splitter:一个字符串,指定切分原则,可以为如下: best:表示选择最优的切分 random:表示随机切分
(3)max_features:可以为整数、浮点、字符串或者 None,指定了寻找 best split 时考 虑的特征数量。 如果是整数,则每次切分只考虑 max_features 个特征。 如果是浮点数,则每次切分只考虑 max_features*n_features 个特征。 如果是字符串 auto 或者 sqrt,则 max_features 等于 sqrt(n_feautures) 如果是字符串 log2,则 max_features 等于 log2(n_features) 如果是 none,则 max_features 等于 n_features. (4)max_depth:可以为整数或者 None,指定树的最大深度。 如果为 None,则表示树的深度不限(直到每个叶子都是纯的,即叶子结点中所有的样 本点都属于一个类,或者叶子中包含小于 min_samples_split 个样本点。 (5)min_samples_split:为整数,指定每个内部节点(非叶子节点)包含的最少样本数。
(6)min_samples_leaf 为整数,指定每个叶子节点包含的最少的样本数。 (7)min_weight_fraction_leaf:为浮点数,叶子结点中样本的最小权重系数。
(8)min_leaf_nodes:为整数或 None,指定最大的叶节点数量。 如果为 None,此时叶子节点数量不限制。 如果为非 None,则 max_depth 被忽略。
(9)class_weight:为一个字典、字典的列表、字符串‘balanced’,或者 None,它指定了 分类的权重。权重的形式为:{class_label:weight} 如果是 None,则每个分类的权重都为 1. 字符串 balanced 表示分类权重是样本中各分类出现频率的反比。
(10)random_state:一个整数或者一个 Randomstate 实例,或者 None。 如果为整数,则它指定了随机数生成器的种子。 如果为 Randomstate 实例,则指定了随机数生成器。 如果为 None,则使用默认的随机数生成器。 (11)presort:一个布尔值,指定是否提前排序数据,从而加速寻找最优切分的过程。 设置为 True 时,对于大数据集会减慢总体的训练过程;但是对于一个小数据集或者设定了 最大深度的情况下,会加速训练过程。
3. API 的属性详解 共 7 各属性: (1)classes_:分类的标签值 (2)feature_importances_:给出了特征的重要程度。该值越高,则特征越重要(也称之为
Gini_importance) (3)max_feature_:max_feature 的推断值。 (4)n_classes_:给出了分类的数量 (5)n_feautures_:执行 fit 之后特征的数量 (6)n_outputs_:执行 fit 之后输出的数量 (7)tree_:一个 Tree 对象,即底层的决策树。
4.API 的方法详解 共有五种方法:
(1)fit(X,y):训练模型
(2)predict(X,)用模型进行预测,返回预测值
(3)predict_log_proba(X):返回一个数组,数组的元素依次是 X 预测为各个类别的概率 的对数值。
(4)predict_proba(X):返回一个数组,数组的元素依次时 X 预测为各个类别的概率值。
(5)score(X,y):返回在(X,y)上预测的准确率(accurary)的平均值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值