赞
踩
今天给大家介绍一下 Python 的十大可视化工具,每一个都独具特色,惊艳一方。
matplotlib是 Python 的一个绘图库,可以绘制出高质量的折线图、散点图、柱状图、条形图等等。它也是许多其他可视化库的基础。
- import matplotlib.pyplot as plt
- import numpy as np
-
- x = np.linspace(0, 10, 100)
- y = np.sin(x)
-
- plt.plot(x, y)
- plt.show()
'运行
seaborn 是基于 Matplotlib 的 Python 数据可视化库,专门用于绘制统计图形,如热图、小提琴图、带误差线的折线图等等。
- import seaborn as sns
- import pandas as pd
-
- df = pd.read_csv('data.csv')
-
- sns.boxplot(x='day', y='total_bill', data=df)
plotly 是一个交互式数据可视化库,可以绘制出高质量的折线图、散点图、3D 图形等等。它支持多种编程语言,如 Python、R、JavaScript 等等。
- import plotly.graph_objs as go
- import numpy as np
-
- x = np.linspace(0, 10, 100)
- y = np.sin(x)
-
- fig = go.Figure(data=go.Scatter(x=x, y=y))
- fig.show()
bokeh 是一个交互式数据可视化库,也支持多种编程语言,如 Python、R、JavaScript 等等。它可以绘制出高质量的折线图、散点图、柱状图、条形图等等。
- from bokeh.plotting import figure, show
- import numpy as np
-
- x = np.linspace(0, 10, 100)
- y = np.sin(x)
-
- p = figure(title='Sine Wave')
- p.line(x, y, legend_label='Sine')
- show(p)
altair 是一个基于 Vega-Lite 的 Python 可视化库,可以快速轻松地绘制出高质量的折线图、散点图、柱状图等等。
- import altair as alt
- import pandas as pd
-
- df = pd.read_csv('data.csv')
-
- alt.Chart(df).mark_bar().encode(
- x='year',
- y='sales',
- color='region'
- )
ggplot 是一个基于 R 语言中的 ggplot2 库的 Python 可视化库,可以绘制出高质量的散点图、柱状图、箱线图等等。
- from ggplot import *
- import pandas as pd
-
- df = pd.read_csv('data.csv')
-
- ggplot(df, aes(x='date', y='value', color='variable')) + \
- geom_line() + \
- theme_bw()
holoviews 是一个 Python 可视化库,可以创建交互式的数据可视化,支持多种类型的可视化图形,如折线图、散点图、柱状图、热力图等等。
- import holoviews as hv
- import numpy as np
-
- x = np.linspace(0, 10, 100)
- y = np.sin(x)
-
- hv.extension('bokeh')
- hv.Curve((x, y))
plotnine 是一个基于 Python 的 ggplot2 库的可视化库,它可以创建高质量的数据可视化图形,如散点图、柱状图、线图等等。
- from plotnine import *
- import pandas as pd
-
- df = pd.read_csv('data.csv')
-
- (ggplot(df, aes(x='year', y='sales', fill='region')) +
- geom_bar(stat='identity', position='dodge'))
wordcloud 是一个用于生成词云的 Python 库,可以将文本中出现频率高的词汇以图形的方式展示出来。
- from wordcloud import WordCloud
- import matplotlib.pyplot as plt
-
- text = "Python is a high-level programming language"
-
- wordcloud = WordCloud().generate(text)
-
- plt.imshow(wordcloud, interpolation='bilinear')
- plt.axis('off')
- plt.show()
networkx 是一个用于创建、操作和可视化复杂网络的 Python 库。它支持创建多种类型的网络结构,如有向图、无向图、加权图等等。
- import networkx as nx
- import matplotlib.pyplot as plt
-
- G = nx.DiGraph()
-
- G.add_edge('A', 'B')
- G.add_edge('B', 'C')
- G.add_edge('C', 'D')
- G.add_edge('D', 'A')
-
- pos = nx.spring_layout(G)
-
- nx.draw_networkx_nodes(G, pos, node_size=500)
- nx.draw_networkx_edges(G, pos)
- nx.draw_networkx_labels(G, pos)
-
- plt.axis('off')
- plt.show()
套用西瓜书上的一个图来说明决策树算法是如何工作的:
我们挑选西瓜时,都会考虑西瓜脐部、色泽、根蒂以及敲一敲听声音等因素(特征),决策树就是对这些考虑因素进行逐个拆解,从而判断西瓜(样本)是好瓜还是坏瓜(类别)。
从上面来看,这些特征好像都是离散型的,对于 Iris 数据集中数值特征来说,我们可以设定一个阈值,比如判断萼片宽度(sepal width)是否小于 2.5 厘米。
决策树算法从树根开始,选择能够产生最大信息增益(Information Gain,IG)的特征进行数据集拆分,一直到叶子节点为止,所有叶子节点中的样本都属于同一个类别,这样就可能会产生非常深的树,从而引发过拟合问题,所以就需要对树进行剪枝以限制树的深度(模型复杂度)。
信息增益的公式定义如下
f 是要执行拆分的特征,Dp 和 Dj 表示父节点 p 和第 j 个孩子节点中的样本集,Np 和 Nj 分别表示父节点 p 和第 j 个孩子节点中的训练样本数量。I 就表示节点的纯度。
所以信息增益就是衡量父节点纯度和所有孩子节点纯度加权和的差异。
包括 scikit-learn 在内的大多数机器学习库的决策树算法都会将父节点分裂成左右两个孩子节点,所以信息增益公式可以简化为:
现在有 Gini 纯度、熵和分类错误三种节点纯度衡量指标。
首先我们看一下熵(entropy):
p(i|t) 表示节点 t 中属于类别 i 的样本占该节点中所有样本的比例。如果节点 t 中所有样本都属于同一个类别,那么熵就是 0,表示这个节点没有不确定性;如果节点 t 中的每个样本都分属于不同的类别,那么此时熵最大,表示这个节点的不确定性最大。
Gini 纯度可以看作是最小化误分类概率的指标:
在实际应用中,Gini 纯度和熵表现很类似,所以不建议花很多精力去比较在选择哪种纯度衡量指标。相反更应集中精力实验不同决策树剪枝技巧。
最后一个就是分类错误:
这个指标适合用来做决策树剪枝,但是由于它对于节点中类别概率分布不敏感,所以它不适合用来生成决策树。
我们现在使用 scikit-learn 提供的 DecisionTreeClassifier 构建一个深度为 4,采样 Gnini 纯度的分类决策树,还是使用 Iris 数据集。
决策树算法不要求特征缩放。
可以看到这些决策边界几乎和坐标轴平行。
我们可以可视化生成的决策树,从而也能对模型的预测结果做出解释。
树分支的左孩子表示满足父节点中的判断条件,右孩子表示不满足条件。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。