机器学习系列(4)_数据分析之Kaggle鸢尾花iris(下)

简介: 那么问题来了,你女朋友家的一株鸢尾花开花了,她测量了一下,花萼长宽花瓣长宽分别是3.1、2.3、1.2、0.5,然后她就问你:“我家这朵鸢尾花到底属于哪个分类?”

三、决策树和随机森林



1、绘制图形


%matplotlib inline 
import matplotlib.pyplot as plt 
import seaborn as sb 
sb.pairplot(iris_data.dropna(),hue='class')

image.png

绘制小提琴图:

plt.figure(figsize=(10,10))
for column_index,column in enumerate(iris_data.columns):
    if column == 'class':
        continue
    plt.subplot(2,2,column_index + 1)
    sb.violinplot(x='class' ,y=column,data=iris_data)

image.png



2、比较参数


from sklearn.model_selection import train_test_split
all_inputs=iris_data[['sepal_length','sepal_width','petal_length','petal_width']].values   
all_inputs
all_classes=iris_data['class'].values 
(training_inputs,
testing_inputs,
training_classes,
testing_classes)=train_test_split(all_inputs,all_classes,train_size=0.75,random_state=1)
all_classes
training_inputs
# train_size=0.75 :75%作为训练集
from sklearn.tree import DecisionTreeClassifier
decision_tree_classifier=DecisionTreeClassifier()
decision_tree_classifier.fit(training_inputs,training_classes)
  1. criterion :gini or entropy
    评判标准:基尼系数或者熵
    例:criterion='gini' (表示使用基尼系数实现决策树)
  2. splitter:best or random
    在所有特征中找最好的切分点 (best)或者随机选取( random)
  3. max_features:表示是否需要把所有特征加到决策树当中。
    有参数:None(all), log2, sqrt, N 。 特征小于50时一般取所有,大于50则可以考虑使用log2作为参数。
  4. min_depth
    数据少或者特征少时可以不管这个值,如果模型样本多,可以适当限制这个值
  5. max_depth:树的最大深度
  6. min_samples_split
    如果某节点的样本数少于 min_samples_split,则不会继续再尝试选择最优特征来进行划分。如果样本不大,不需要管这个值。如果样本数量级非常大,建议增大这个值。
  7. min_samples_leaf:叶子节点的最小样本数。
    这个值限制了特兹节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起剪枝。如果样本量不大,不需要管这个值,大些如10万可以尝试下5
  8. .min_weight_fraction_leaf
    这个值限制了叶子节点所有样本权重和最小值,如果小于这个值,则会和兄弟节点一起被剪枝默认为0,就是不考虑权重问题
    一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这是要注意这个值
  9. max_leaf_nodes
    通过限制最大叶子节点数,可以防止过拟合,默认是’None’,即不限制最大的叶子节点数。如果加了限制,算法会简历在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征成分多的话,可以加限制,具体的值可以通过交叉验证得到。
  10. class_weight
    指定样本各类别的权重,主要是为了防止训练集某些类别的样本过多,导致尊练的决策树过于偏向这些类别
    这里可以自己指定各个样本的权重,如果使用’balanced’,则算法会自己计算权重,样本最少的类别所对应的样本权重会高
  11. min_inpurity_split
    这个值限制了决策树的增长,如果某杰底单的不纯度(基尼系数,信息增益,均方差,绝对值)小于这个阈值
    则节点不再生成子节点,即为叶子节点
  12. train_size=0.75 :75%作为训练集
  13. min_impurity_decrease:节点的纯度。节点可能出现分割的不够干净的问题。导致后期在叶子节点生成部分无法生成叶子节点或者太细的问题。
  1. random_state:其数值发生变化,则得到的数据也会发生变化。

查看学习的效果(成绩):

decision_tree_classifier.score(testing_inputs,testing_classes)
cd09f59474214ef08b8f11d62e845fdd.png

查看交叉比较之后的成绩 :

from sklearn.model_selection import cross_val_score 
import numpy as np 
decision_tree_classifier=DecisionTreeClassifier()
cv_scores=cross_val_score(decision_tree_classifier,all_inputs,all_classes,cv=10)
print(cv_scores)
sb.displot(cv_scores)
plt.title('Average score:{}'.format(np.mean(cv_scores)))

ec34b451f728459db97bf710d0994800.png

decision_tree_classifier=DecisionTreeClassifier(max_depth=3) # max_depth:表示分类是否有区别,分几类
cv_scores=cross_val_score(decision_tree_classifier,all_inputs,all_classes,cv=10)
print(cv_scores)
sb.displot(cv_scores,kde=False)
plt.title('Average score:{}'.format(np.mean(cv_scores)))

65775ef97c32401495cab45ef6dc4f61.png

from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import StratifiedKFold 
decision_tree_classifier=DecisionTreeClassifier()
parameter_grid={'max_depth':[1,2,3,4,5],
               'max_features':[1,2,3,4]}
# 将每个max_depth与每个max_features都组合一遍,找出其中最好的
skf=StratifiedKFold(n_splits=10)
cross_validation=skf.get_n_splits(all_inputs,all_classes)
grid_search=GridSearchCV(decision_tree_classifier,
                        param_grid=parameter_grid,
                        cv=cross_validation)
grid_search.fit(all_inputs,all_classes)
print('Best score:{}'.format(grid_search.best_score_)) # 得分最高
print('Best parameters:{}'.format(grid_search.best_params_)) # 得分最好

df8166885b12490bbaaf8599872f9d6e.png

绘制热力图

grid_visualization=[]
for grid_pair in grid_search.cv_results_['mean_test_score']:
    grid_visualization.append(grid_pair)
grid_visualization=np.array(grid_visualization)
grid_visualization.shape=(5,4)
sb.heatmap(grid_visualization,cmap='Blues') # 蓝色
plt.xticks(np.arange(4)+0.5,grid_search.param_grid['max_features'])
plt.yticks(np.arange(5)+0.5,grid_search.param_grid['max_depth'][::-1])
plt.xlabel('max_features')
plt.ylabel('max_depth')

c3887bc5c42c46b08fe1f52c016ba01b.png2cd2b6302263424d834bc43a9a2bf2a7.png


3、调用Graphviz绘制决策树


decision_tree_classifier=grid_search.best_estimator_
decision_tree_classifier # 拿到得分最高的数据
import sklearn.tree as tree 
from six import StringIO
with open('iris_dtc.dot','w') as out_file:
    out_file=tree.export_graphviz(decision_tree_classifier,out_file=out_file)

此时就生成一个文档:(第几个节点选择哪几个,把结果写在dot文档)

75da599f87fc48b48527e4f017406459.png

文档内容:

digraph Tree {
node [shape=box] ;
0 [label="X[2] <= 2.45\ngini = 0.667\nsamples = 150\nvalue = [50, 50, 50]"] ;
1 [label="gini = 0.0\nsamples = 50\nvalue = [50, 0, 0]"] ;
0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;
2 [label="X[3] <= 1.75\ngini = 0.5\nsamples = 100\nvalue = [0, 50, 50]"] ;
0 -> 2 [labeldistance=2.5, labelangle=-45, headlabel="False"] ;
3 [label="gini = 0.168\nsamples = 54\nvalue = [0, 49, 5]"] ;
2 -> 3 ;
4 [label="gini = 0.043\nsamples = 46\nvalue = [0, 1, 45]"] ;
2 -> 4 ;
}

使用Graphviz绘制决策树图片,注意,这里要先安装Graphviz,配置环境变量,并且打开dot.exe

在命令行中先转入iris_dtc.dot文件所在的目录,然后调用如下命令

404cce4b8f924f67a69660599c207e27.png

dot -Tpdf iris_dtc.dot -o irisdt.pdf

此时就生成我们需要的pdf文件:

8f9c9becb7324ae1b00750986b7ff759.png

39b68fe4c3a44998b27ff0891f88fe9e.png



相关文章
|
2月前
|
机器学习/深度学习 数据采集 数据挖掘
实战派教学:掌握Scikit-learn,轻松实现数据分析与机器学习模型优化!
【10月更文挑战第4天】Scikit-learn凭借高效、易用及全面性成为数据科学领域的首选工具,简化了数据预处理、模型训练与评估流程,并提供丰富算法库。本文通过实战教学,详细介绍Scikit-learn的基础入门、数据预处理、模型选择与训练、评估及调优等关键步骤,助你快速掌握并优化数据分析与机器学习模型。从环境搭建到参数调优,每一步都配有示例代码,便于理解和实践。
102 2
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
215 4
|
25天前
|
机器学习/深度学习 数据采集 算法
机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用
医疗诊断是医学的核心,其准确性和效率至关重要。本文探讨了机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用。文章还讨论了Python在构建机器学习模型中的作用,面临的挑战及应对策略,并展望了未来的发展趋势。
83 1
|
2月前
|
机器学习/深度学习 并行计算 数据挖掘
R语言是一种强大的统计分析工具,广泛应用于数据分析和机器学习领域
【10月更文挑战第21天】R语言是一种强大的统计分析工具,广泛应用于数据分析和机器学习领域。本文将介绍R语言中的一些高级编程技巧,包括函数式编程、向量化运算、字符串处理、循环和条件语句、异常处理和性能优化等方面,以帮助读者更好地掌握R语言的编程技巧,提高数据分析的效率。
57 2
|
2月前
|
机器学习/深度学习 算法 数据挖掘
从零到精通:Scikit-learn在手,数据分析与机器学习模型评估不再难!
【10月更文挑战第4天】在数据科学领域,模型评估是连接理论与实践的桥梁,帮助我们理解模型在未知数据上的表现。对于初学者而言,众多评估指标和工具常令人困惑。幸运的是,Scikit-learn 这一强大的 Python 库使模型评估变得简单。本文通过问答形式,带你逐步掌握 Scikit-learn 的评估技巧。Scikit-learn 提供了丰富的工具,如交叉验证、评分函数(准确率、精确率、召回率、F1 分数)、混淆矩阵和 ROC 曲线等。
44 1
|
3月前
|
机器学习/深度学习 算法 数据挖掘
Python数据分析革命:Scikit-learn库,让机器学习模型训练与评估变得简单高效!
在数据驱动时代,Python 以强大的生态系统成为数据科学的首选语言,而 Scikit-learn 则因简洁的 API 和广泛的支持脱颖而出。本文将指导你使用 Scikit-learn 进行机器学习模型的训练与评估。首先通过 `pip install scikit-learn` 安装库,然后利用内置数据集进行数据准备,选择合适的模型(如逻辑回归),并通过交叉验证评估其性能。最终,使用模型对新数据进行预测,简化整个流程。无论你是新手还是专家,Scikit-learn 都能助你一臂之力。
153 8
|
3月前
|
机器学习/深度学习 数据可视化 数据挖掘
数据可视化大不同!Python数据分析与机器学习中的Matplotlib、Seaborn应用新视角!
在数据科学与机器学习领域,数据可视化是理解数据和优化模型的关键。Python凭借其强大的可视化库Matplotlib和Seaborn成为首选语言。本文通过分析一份包含房屋面积、卧室数量等特征及售价的数据集,展示了如何使用Matplotlib绘制散点图,揭示房屋面积与售价的正相关关系;并利用Seaborn的pairplot探索多变量间的关系。在机器学习建模阶段,通过随机森林模型展示特征重要性的可视化,帮助优化模型。这两个库在数据分析与建模中展现出广泛的应用价值。
51 2
|
4月前
|
数据采集 机器学习/深度学习 算法
"揭秘数据质量自动化的秘密武器:机器学习模型如何精准捕捉数据中的‘隐形陷阱’,让你的数据分析无懈可击?"
【8月更文挑战第20天】随着大数据成为核心资源,数据质量直接影响机器学习模型的准确性和效果。传统的人工审查方法效率低且易错。本文介绍如何运用机器学习自动化评估数据质量,解决缺失值、异常值等问题,提升模型训练效率和预测准确性。通过Python和scikit-learn示例展示了异常值检测的过程,最后强调在自动化评估的同时结合人工审查的重要性。
107 2
|
5月前
|
机器学习/深度学习 人工智能 TensorFlow
🔥零基础逆袭!Python数据分析+机器学习:TensorFlow带你秒变AI大师
【7月更文挑战第29天】在这个数据驱动的时代,掌握Python与机器学习技能是进入AI领域的关键。即使从零开始,也能通过TensorFlow成为AI专家。
68 8
|
5月前
|
机器学习/深度学习 自然语言处理 数据挖掘
机器学习不再是梦!PyTorch助你轻松驾驭复杂数据分析场景
【7月更文挑战第31天】机器学习已深深嵌入日常生活,从智能推荐到自动驾驶皆为其应用。PyTorch作为一个开源库,凭借简洁API、动态计算图及GPU加速能力,降低了学习门槛并提高了开发效率。通过一个使用PyTorch构建简单CNN识别MNIST手写数字的例子,展现了如何快速搭建神经网络。随着技能提升,开发者能运用PyTorch及其丰富的生态系统(如torchvision、torchtext和torchaudio)应对复杂场景,如自然语言处理和强化学习。掌握PyTorch,意味着掌握了数据时代的关键技能。
45 1