iris鸢尾花数据集java,决策树-sklearn实现--基于IRIS(鸢尾花)数据集和泰坦尼克号数据集...

Sklearn实现决策树详解

Sklearn实现了以下四种类型的树

1)tree.DecisionTreeClassifier([criterion, …]) 决策树分类器.

2)tree.DecisionTreeRegressor([criterion, …]) 回归树.

3)tree.ExtraTreeClassifier([criterion, …]) 一种非常随机的树分类器.

4)tree.ExtraTreeRegressor([criterion, …]) 一种非常随机的树回归器

tree.export_graphviz(decision_tree[, …]) 以点的格式导出树

--------------------1) 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)

参数:

criterion:字符型,可选,规定了该决策树所采用的的最佳分割属性的判决方法,有两种:“gini”,“entropy”,默认为’gini’,

splitter: 字符型,可选(默认=“best”)用于在每个节点选择分割的策略,可填‘best’或’random’,前者在特征的所有划分点中找出最优的划分点。后者是随机的在部分划分点中找局部最优的划分点。默认的"best"适合样本量不大的时候,而如果样本数据量非常大,此时决策树构建推荐"random"

max_depth: int型或None,可选(默认=None)树的最大深度,对于防止过拟合非常有用。如果不输入的话,决策树在建立子树的时候不会限制子树的深度。一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。

min_samples_split: int型float型,可选(默认值=2)分割内部节点所需的最小样本数量;如果是int型,则min_samples_split为最小样本数量。如果是float型,则min_samples_split是分数,ceil(min_samples_split * n_samples)是每个分割的最小样本数。

min_samples_leaf: int型float型,可选(默认值=1)叶节点上所需的最小样本数。如果是int类型,则将min_samples_leaf作为最小值。若是float,那么min_samples_leaf是分数,ceil(min_samples_leaf * n_samples)是每个节点的最小样本数。

min_weight_fraction_leaf:浮点型,可选(默认=0)。叶节点上(所有输入样本的)权值之和的最小加权分数。当没有提供 sample_weight时,样品的重量相等。

max_features: int, float, string or None, 可选(默认=None),在寻找最佳分割时需要考虑的特性数量;如果是int类型,则考虑每个分割处的max_features特性。如果是float,那么max_features是一个分数,并且在每个分割中都考虑int(max_features * n_features)特性。如果“auto”,则max_features=sqrt(n_features)。如果“sqrt”,则max_features=sqrt(n_features)。如果“log2”,则max_features=log2(n_features)。如果没有,则max_features=n_features。

class_weight: 指定样本各类别的的权重,主要是为了防止训练集某些类别的样本过多,导致训练的决策树过于偏向这些类别。这里可以自己指定各个样本的权重,或者用“balanced”,如果使用“balanced”,则算法会自己计算权重,样本量少的类别所对应的样本权重会高。当然,如果你的样本类别分布没有明显的偏倚,则可以不管这个参数,选择默认的"None"

random_state: int型RandomState实例或None,可选(默认=None)如果是int, random_state是随机数生成器使用的种子;如果是RandomState实例,random_state是随机数生成器;如果没有,随机数生成器是np.random使用的RandomState实例。

一.本文首先采用基于IRIS(鸢尾花)数据集实现决策树:

由Fisher在1936年整理,包含4个特征(Sepal.Length(花萼长度)、Sepal.Width(花萼宽度)、Petal.Length(花瓣长度)、Petal.Width(花瓣宽度)),特征值都为正浮点数,单位为厘米。目标值为鸢尾花的分类(Iris Setosa(山鸢尾)、Iris Versicolour(杂色鸢尾),Iris Virginica(维吉尼亚鸢尾))。

#coding:utf-8

from sklearn import datasets

import matplotlib.pyplot as plt

import numpy as np

from sklearn import tree

from sklearn.cross_validation import train_test_split

"""

Iris数据集是常用的分类实验数据集,

由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,

是一类多重变量分析的数据集。数据集包含150个数据集,

分为3类,每类50个数据,每个数据包含4个属性。

可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。

"""

#载入数据集

iris = datasets.load_iris()

# print(iris)

iris_data = iris["data"]

# print(iris_data )

iris_label = iris["target"]

# print(iris_label)

iris_target_name = iris['target_names']

# print(iris_target_name)

X = np.array(iris_data)

Y = np.array(iris_label)

X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size=0.25,random_state=1)

# print(Y_train)

# print(Y_test)

#训练

clf = tree.DecisionTreeClassifier(max_depth=3)

clf.fit(X_train,Y_train)

predict = clf.predict(X_test)

sum = 0

for i in range(len(Y_test)):

if predict[i]==Y_test[i]:

sum +=1

print("sum:%s,len(Y_test):%s"%(sum,len(Y_test)))

print("预测率:%s"%(sum/len(Y_test)))

#这里预测当前输入的值的所属分类

print("类别是",iris_target_name[clf.predict([[7,1,1,1]])[0]])

结果:

sum:37,len(Y_test):38

预测率:0.9736842105263158

类别是 versicolor

如果需要对数据进行归一化,则在iris_data = iris[“data”]前加上这句

#数据预处理--归一化

from sklearn.preprocessing import Normalizer

iris.data=Normalizer().fit_transform(iris.data)

二.采用泰坦尼克号数据集实现决策树:

参考:

https://baijiahao.baidu.com/s?id=1626600917053236237&wfr=spider&for=pc

https://cloud.tencent.com/developer/article/1110727

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值