100天搞定机器学习(100-Days-Of-ML)(十二)决策树

第十二天

决策树

决策树是一种有监督学习算法,主要用于分类问题,适用于可分类的、连续的输入和输出变量。

 

第一步:导入库并加载数据集

import numpy as np
import pandas as pd
​
dataset = pd.read_csv('E:/dataset/Social_Network_Ads.cs')
X = dataset.iloc[ : , [2, 3]].values
Y = dataset.iloc[ : , 4].values
-------------------------------------------
print(X[0])
print(Y[0])

第二步:划分数据集

from sklearn.cross_validation import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.25, random_state = 0)

第三步:特征缩放

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
------------------------------------------
fit_transform函数和tranform函数:
fit_transform()的作用就是先拟合数据,然后转化它将其转化为标准形式.
tranform()的作用是通过找中心和缩放等实现标准化.
到了这里,我们似乎知道了两者的一些差别,就像名字上的不同,前者多了一个fit数据的步骤,那为什么在标准化数据的时候不使用fit_transform()函数呢?
原因如下:
为了数据归一化(使特征数据方差为1,均值为0),我们需要计算特征数据的均值μ和方差σ^2,再使用下面的公式进行归一化:
x` = (x - μ) / σ^2
我们在训练集上调用fit_transform(),其实找到了均值μ和方差σ^2,即我们已经找到了转换规则,我们把这个规则利用在训练集上,同样,我们可以直接将其运用到测试集上(甚至交叉验证集),所以在测试集上的处理,我们只需要标准化数据而不需要再次拟合数据.

第四步:训练决策树模型

from sklearn.tree import DecisionTreeClassifier
classifier = DecisionTreeClassifier(criterion = 'entropy', random_sttate = 0)
classifier.fit(X_train, Y_train)

Tips:DecisionTreeClassifier的参数说明

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)
主要参数说明:
criterion : string, optional (default=”gini”)
选择最优划分属性的手段,Gini系数、entropy信息增益
splitter : string, optional (default=”best”)
一种用来在节点中选择分类的策略。支持的策略有"best",选择最好的分类,"random"选择最好的随机分类
max_depth : int or None, optional (default=None)
树的最大深度。如果是"None",则节点会一直扩展直到所有的叶子都是纯的或者所有的叶子节点都包含少于min_samples_split个样本点。
min_samples_split : int, float, optional (default=2)
    区分一个内部节点需要的最少的样本数。    
    1.如果是int,将其最为最小的样本数。
    2.如果是float,min_samples_split是一个百分率并且ceil(min_samples_split*n_samples)是每个分类需要的样本数。ceil是取大于或等于指定表达式的最小整数。
min_samples_leaf : int, float, optional (default=1)
    一个叶节点所需要的最小样本数:
    1.如果是int,则其为最小样本数
    2.如果是float,则它是一个百分率并且ceil(min_samples_leaf*n_samples)是每个节点所需的样本数。
    。。。。太多了,有空去官网看吧,官网API文档http://sklearn.apachecn.org/cn/0.19.0/modules/generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier

第五步:预测结果

Y_pred = classifier.predict(X_test)

第六步:混淆矩阵

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(Y_test, Y_pred)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值