当前位置: 首页 > wzjs >正文

青岛做网站费用溧阳网站建设制作

青岛做网站费用,溧阳网站建设制作,软件界面设计用什么软件,线上app怎么做决策树 定义 从根节点开始,也就是拥有全部的数据,找一个维度对根节点开始划分, 划分后希望数据整体的信息熵是最小的, 针对划分出来的两个节点,我们继续重复刚才的划分方式寻找信息熵最小的维度和阈值。 递归这个…

决策树

定义

从根节点开始,也就是拥有全部的数据,找一个维度对根节点开始划分,

划分后希望数据整体的信息熵是最小的,

针对划分出来的两个节点,我们继续重复刚才的划分方式寻找信息熵最小的维度和阈值。

递归这个过程就形成了决策树。

特点

非参数学习算法

可以解决分类问题

天然可以解决多分类问题

非常好的可解释性

代码实现

sklearn封装的方式

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.tree import DecisionTreeClassifier
# 学习使用数据集,去后两个维度,便于可视化
iris = datasets.load_iris()
X = iris.data[:, 2:]
y = iris.targetdt_clf = DecisionTreeClassifier(max_depth=2, criterion="entropy", random_state=42)
dt_clf.fit(X, y)# 画图函数
def plot_decision_boundary(model, axis):x0, x1 = np.meshgrid(np.linspace(axis[0], axis[1], int((axis[1] - axis[0]) * 100)).reshape(-1, 1),np.linspace(axis[2], axis[3], int((axis[3] - axis[2]) * 100)).reshape(-1, 1),)X_new = np.c_[x0.ravel(), x1.ravel()]y_predict = model.predict(X_new)zz = y_predict.reshape(x0.shape)from matplotlib.colors import ListedColormapcustom_cmap = ListedColormap(["#EF9A9A", "#FFF59D", "#90CAF9"])plt.contourf(x0, x1, zz, cmap=custom_cmap)plot_decision_boundary(dt_clf, axis=[0.5, 7.5, 0, 3])
# X[y==0,0]表示样本target为0的,第一个维度,其余类推
plt.scatter(X[y == 0, 0], X[y == 0, 1])
plt.scatter(X[y == 1, 0], X[y == 1, 1])
plt.scatter(X[y == 2, 0], X[y == 2, 1])
plt.show()

在这里插入图片描述

信息熵(重要知识)

熵在信息论中代表:随机变量不确定度的度量。

熵越大,数据的不确定性越高;熵越小,数据的不确定性越低,公式如下:
H = − ∑ i − 1 k p i log ⁡ ( p i ) p i 类别  i 的概率 H = -\sum^{k}_{i-1} p_{i}\log(p_{i}) \\ p_{i} 类别\ i \ 的概率 H=i1kpilog(pi)pi类别 i 的概率
如以下两组数据的随机分布如下:
{ 1 3 , 1 3 , 1 3 } H = − 1 3 log ⁡ 1 3 − 1 3 log ⁡ 1 3 − 1 3 log ⁡ 1 3 = 1.0986 { 1 10 , 2 10 , 7 10 } H = − 1 10 log ⁡ 1 10 − 2 10 log ⁡ 2 10 − 7 10 log ⁡ 7 10 = 0.8018 \{\frac{1}{3},\frac{1}{3},\frac{1}{3}\} \\ H = -\frac{1}{3}\log{\frac{1}{3}}-\frac{1}{3}\log{\frac{1}{3}}-\frac{1}{3}\log{\frac{1}{3}} = 1.0986 \\ \\ \{\frac{1}{10},\frac{2}{10},\frac{7}{10}\} \\ H = -\frac{1}{10}\log{\frac{1}{10}}-\frac{2}{10}\log{\frac{2}{10}}-\frac{7}{10}\log{\frac{7}{10}} = 0.8018 \\ {31,31,31}H=31log3131log3131log31=1.0986{101,102,107}H=101log101102log102107log107=0.8018

二分类问题信息熵的公式可化简为:
H = − x log ⁡ ∗ ( x ) − ( 1 − x ) log ⁡ ( 1 − x ) H = -x\log*(x) - (1-x)\log(1-x) H=xlog(x)(1x)log(1x)

import numpy as np
import matplotlib.pyplot as plt
def entropy(p):return -p * np.log(p) - (1-p) * np.log(1-p)
x = np.linspace(0.01, 0.99, 200)
plt.plot(x, entropy(x))
plt.show()

在这里插入图片描述

最小化信息熵划分数据维度和阈值,模拟sklearn中的封装方法

import numpy as np
from collections import Counter
from math import log
from sklearn import datasetsiris = datasets.load_iris()
X = iris.data[:, 2:]
y = iris.targetdef split(X, y, d, value):"""函数功能:根据给定的特征维度d和阈值value,将数据集进行划分X、y分别是数据样本和标签d是数据的某一个维度value是d维度上的一个阈值"""# 寻找所有数据集中维度为d且小于等于value的bool向量index_a = X[:, d] <= valueindex_b = X[:, d] > valuereturn X[index_a], X[index_b], y[index_a], y[index_b]def entropy(y):"""计算信息熵y:类别标签, 类似[0,0,1,1,2,2,2,2]"""counter = Counter(y)res = 0.0for num in counter.values():p_i = num / len(y)  # 计算每个类别的概率res += -p_i * log(p_i)return resdef try_split(X, y):"""寻找传入数据的最优划分方案(信息熵最小)最优的维度和划分阈值"""# 最优信息熵best_entropy = float("inf")best_d, best_v = -1, -1# 搜索过程:从d=0以及d这个维度升序后的相邻样本的均值开始for d in range(X.shape[1]):# 返回排序(升序)后索引sorted_index = np.argsort(X[:, d])for i in range(1, len(X)):if X[sorted_index[i], d] != X[sorted_index[i - 1], d]:# 候选阈值value的确认方式,且相邻的两个值不相等(剪枝)v = (X[sorted_index[i], d] + X[sorted_index[i - 1], d]) / 2X_l, X_r, y_l, y_r = split(X, y, d, v)p_l, p_r = len(X_l) / len(X), len(X_r) / len(X)  # 可以删除占比e = p_l * entropy(y_l) + p_r * entropy(y_r)if e < best_entropy:  # 更新最小熵、最优维度d以及该维度上的最优阈值vbest_entropy, best_d, best_v = e, d, vreturn best_entropy, best_d, best_vbest_entropy, best_d, best_v = try_split(X, y)
print("best_entropy =", best_entropy)
print("best_d =", best_d)
print("best_v =", best_v)
# best_entropy = 0.46209812037329684
# best_d = 0
# best_v = 2.45
# 解释:第一次划分在第0个维度上,阈值为2.45,信息熵最优# 根据第一次的最优划分条件,对数据集进行划分
X1_l, X1_r, y1_l, y1_r = split(X, y, best_d, best_v)
entropy(y1_l)  # 0.0 y1_l信息熵为0,对应X1_l节点无需再划分
entropy(y1_r)  # y1_r信息熵0.6931471805599453,继续划分X1_r节点best_entropy2, best_d2, best_v2 = try_split(X1_r, y1_r)
print("best_entropy =", best_entropy2)
print("best_d =", best_d2)
print("best_v =", best_v2)
# best_entropy = 0.2147644654371359
# best_d = 1
# best_v = 1.75X2_l, X2_r, y2_l, y2_r = split(X1_r, y1_r, best_d2, best_v2)
entropy(y2_l) # 0.30849545083110386
entropy(y2_r)  # 0.10473243910508653
# 信息熵不为0还可以继续划分,此时深度为2

基尼系数

基尼系数公式如下:
G = 1 − ∑ i = 1 k p i 2 G = 1-\sum^{k}_{i=1}p_{i}^2 G=1i=1kpi2
基尼系数和信息熵拥有同样的性质。

基尼系数代码实现

from collections import Counterdef gini(y):counter = Counter(y)res = 1.0for num in counter.values():p = num / len(y)res -= p**2return res

CART

决策树又称:Classification And Regression Tree

复杂度分析:

预测: O ( l o g m ) O(logm) O(logm)

预测: O ( n ∗ m ∗ l o g m ) O(n*m*logm) O(nmlogm)

n 、 m n、m nm 分别是样本数量和数据维度。

决策树的局限性

1、决策数是在某一个维度上进行划分,所以产生的决策边界都是和数据维度平行的,并不会产生倾斜的边界,有时真实数据可能并非如此。

在这里插入图片描述

2、决策树会对个别的样本点是非常敏感的,某一个特殊的样本点可能都会改变决策树的决策边界。


文章转载自:

http://E0WWiQ1a.nfxps.cn
http://HDNrxq8y.nfxps.cn
http://D9AgEWU9.nfxps.cn
http://zU4T4msX.nfxps.cn
http://O4LVt4au.nfxps.cn
http://SVh0UiKb.nfxps.cn
http://QpaT3GX4.nfxps.cn
http://6Yge7ZAp.nfxps.cn
http://FmAA4RiM.nfxps.cn
http://6IjI9pz1.nfxps.cn
http://5Xkkaqmp.nfxps.cn
http://fNJHVFOZ.nfxps.cn
http://87Qk4oZQ.nfxps.cn
http://BVnyHgoz.nfxps.cn
http://JyWeiIU1.nfxps.cn
http://ueHWwVjb.nfxps.cn
http://62fUI4R3.nfxps.cn
http://5gg0Vloy.nfxps.cn
http://8je3C4I0.nfxps.cn
http://X0xTmFrV.nfxps.cn
http://vVQVsJiB.nfxps.cn
http://ZFu1yqD3.nfxps.cn
http://C5O8EKXN.nfxps.cn
http://MKymZUlE.nfxps.cn
http://ikFUZf0O.nfxps.cn
http://EDIoHfnr.nfxps.cn
http://jcW1euLr.nfxps.cn
http://5KfbEhWD.nfxps.cn
http://xecTvkxT.nfxps.cn
http://1fvgSRAC.nfxps.cn
http://www.dtcms.com/wzjs/726959.html

相关文章:

  • 技术网站源码wordpress南宁专业网站开发
  • 用psd做的买书网站百度旗下13个app
  • 企业网站建设市场怎么做网站的ico
  • 网站关键词分布公司网站主要几方面
  • 网站建设话术开场白推广营销方式有哪些
  • 网站增加权重做营销网站要多少钱
  • 网页网站开发工具wordpress怎样显示文章全部列表
  • 知名网站建设简约中国风免费ppt模板
  • 国外做网站的软件成都地铁建设分公司网站
  • 南京做网站引流的公司高端品牌网站建设制作需要注意什么
  • 网站ui设计兼职网页游戏直接玩
  • 网站开发的试题公司网站升级改版方案
  • 湛江建站服务wordpress 微信悬浮
  • 微信网站开发新开页面设计师网址推荐
  • 不注册公司可以做网站吗网站在建设中无法访问
  • 北京seoqq群佛山网站建设优化企业
  • 互联网网站开发html5核酸结果查询
  • 辽宁省住房和城乡建设厅网站进不去中国铁建一体化平台登录
  • 免费1级做爰片在线网站大庆seo推广
  • 新闻静态网站咋做湖南二级建造师在哪个网站做变更
  • 网站的建设服务平台网站平台建设意见
  • 学校网站的建设费用吗工业设计作品网站
  • 五金技术支持东莞网站建设上海做家教去哪个网站
  • 邯郸做网站推广多少钱梧州网站建设2k9网络团队提供高品质网站建设服务
  • 天河定制型网站建设备案增加网站
  • 做伤残鉴约号网站上海徐汇区最新发布
  • 明水县网站建设wordpress二级域名做站群
  • 国际贸易网站建设 中企动力湖北在线网页翻译成中文
  • 网站cdn加速怎么入侵如何制作企业官网
  • 免费建设淘客网站东莞横沥新闻今天