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

合肥有哪些公司是做网站的百度热搜榜排名今日头条

合肥有哪些公司是做网站的,百度热搜榜排名今日头条,大棚建设的网站,机械网站建设开发决策树 决策树可以理解为是一颗倒立的树,叶子在下端,根在最上面 一层一层连接的是交内部节点,内部节点主要是一些条件判断表达式,叶子叫叶节点,叶节点其实就是最终的预测结果,那么当输入x进去,…

决策树

决策树可以理解为是一颗倒立的树,叶子在下端,根在最上面
一层一层连接的是交内部节点,内部节点主要是一些条件判断表达式,叶子叫叶节点,叶节点其实就是最终的预测结果,那么当输入x进去,一层一层的进行选择,就到最后的叶子节点,就完成整个流程,叶子节点的值就是最终的值。
决策树经常用来做分类任务,下面是基本的决策树的结构
在这里插入图片描述

决策树的构造

在构造决策树的时候需要尽可能的减少模型的复杂度,可见决策树的层数和节点数不要过多才最好。
X,Y的取值范围是1,。。。,n 则信息熵的公式
在这里插入图片描述
交叉熵
在这里插入图片描述
条件熵
在这里插入图片描述
信息增益

                         **I=H(X)-H(X|Y)**

信息增益率
在这里插入图片描述
其中
在这里插入图片描述
采用信息增益率可以减少模型整体的复杂度。
ID3和C4.5
ID3算法是基于信息增益来做的,C4.5是结合信息增益率来做的,只能解决分类问题。
在这里插入图片描述
CART算法
ID3算法,C4.5只能解决分类问题。在回归问题中,采用CART算法,其采用了误差的平方作为标准

在这里插入图片描述
此外CART算法可以解决分类问题
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd# 读取数据
data = pd.read_csv('titanic/train.csv')
# 查看数据集信息和前5行具体内容,其中NaN代表数据缺失
print(data.info())
print(data[:5])# 删去编号、姓名、船票编号3列
data.drop(columns=['PassengerId', 'Name', 'Ticket'], inplace=True)
#%%
feat_ranges = {}
cont_feat = ['Age', 'Fare'] # 连续特征
bins = 10 # 分类点数for feat in cont_feat:# 数据集中存在缺省值nan,需要用np.nanmin和np.nanmaxmin_val = np.nanmin(data[feat]) max_val = np.nanmax(data[feat])feat_ranges[feat] = np.linspace(min_val, max_val, bins).tolist()print(feat, ':') # 查看分类点for spt in feat_ranges[feat]:print(f'{spt:.4f}')
#%%
# 只有有限取值的离散特征
cat_feat = ['Sex', 'Pclass', 'SibSp', 'Parch', 'Cabin', 'Embarked'] 
for feat in cat_feat:data[feat] = data[feat].astype('category') # 数据格式转为分类格式print(f'{feat}{data[feat].cat.categories}') # 查看类别data[feat] = data[feat].cat.codes.to_list() # 将类别按顺序转换为整数ranges = list(set(data[feat]))ranges.sort()feat_ranges[feat] = ranges
#%%
# 将所有缺省值替换为-1
data.fillna(-1, inplace=True)
for feat in feat_ranges.keys():feat_ranges[feat] = [-1] + feat_ranges[feat]
#%%
# 划分训练集与测试集
np.random.seed(0)
feat_names = data.columns[1:]
label_name = data.columns[0]
# 重排下标之后,按新的下标索引数据
data = data.reindex(np.random.permutation(data.index))
ratio = 0.8
split = int(ratio * len(data))
train_x = data[:split].drop(columns=['Survived']).to_numpy()
train_y = data['Survived'][:split].to_numpy()
test_x = data[split:].drop(columns=['Survived']).to_numpy()
test_y = data['Survived'][split:].to_numpy()
print('训练集大小:', len(train_x))
print('测试集大小:', len(test_x))
print('特征数:', train_x.shape[1])
#%%
class Node:def __init__(self):# 内部结点的feat表示用来分类的特征编号,其数字与数据中的顺序对应# 叶结点的feat表示该结点对应的分类结果self.feat = None# 分类值列表,表示按照其中的值向子结点分类self.split = None# 子结点列表,叶结点的child为空self.child = []
#%%
class DecisionTree:def __init__(self, X, Y, feat_ranges, lbd):self.root = Node()self.X = Xself.Y = Yself.feat_ranges = feat_ranges # 特征取值范围self.lbd = lbd # 正则化系数self.eps = 1e-8 # 防止数学错误log(0)和除以0self.T = 0 # 记录叶结点个数self.ID3(self.root, self.X, self.Y)# 工具函数,计算 a * log adef aloga(self, a):return a * np.log2(a + self.eps)# 计算某个子数据集的熵def entropy(self, Y):cnt = np.unique(Y, return_counts=True)[1] # 统计每个类别出现的次数N = len(Y)ent = -np.sum([self.aloga(Ni / N) for Ni in cnt])return ent# 计算用feat <= val划分数据集的信息增益def info_gain(self, X, Y, feat, val):# 划分前的熵N = len(Y)if N == 0:return 0HX = self.entropy(Y)HXY = 0 # H(X|Y)# 分别计算H(X|X_F<=val)H(X|X_F>val)Y_l = Y[X[:, feat] <= val]HXY += len(Y_l) / len(Y) * self.entropy(Y_l)Y_r = Y[X[:, feat] > val]HXY += len(Y_r) / len(Y) * self.entropy(Y_r)return HX - HXY# 计算特征feat <= val本身的复杂度H_Y(X)def entropy_YX(self, X, Y, feat, val):HYX = 0N = len(Y)if N == 0:return 0Y_l = Y[X[:, feat] <= val]HYX += -self.aloga(len(Y_l) / N)Y_r = Y[X[:, feat] > val]HYX += -self.aloga(len(Y_r) / N)return HYX# 计算用feat <= val划分数据集的信息增益率def info_gain_ratio(self, X, Y, feat, val):IG = self.info_gain(X, Y, feat, val)HYX = self.entropy_YX(X, Y, feat, val)return IG / HYX# 用ID3算法递归分裂结点,构造决策树def ID3(self, node, X, Y):# 判断是否已经分类完成if len(np.unique(Y)) == 1:node.feat = Y[0]self.T += 1return# 寻找最优分类特征和分类点best_IGR = 0best_feat = Nonebest_val = Nonefor feat in range(len(feat_names)):for val in self.feat_ranges[feat_names[feat]]:IGR = self.info_gain_ratio(X, Y, feat, val)if IGR > best_IGR:best_IGR = IGRbest_feat = featbest_val = val# 计算用best_feat <= best_val分类带来的代价函数变化# 由于分裂叶结点只涉及该局部,我们只需要计算分裂前后该结点的代价函数# 当前代价cur_cost = len(Y) * self.entropy(Y) + self.lbd# 分裂后的代价,按best_feat的取值分类统计# 如果best_feat为None,说明最优的信息增益率为0,# 再分类也无法增加信息了,因此将new_cost设置为无穷大if best_feat is None:new_cost = np.infelse:new_cost = 0X_feat = X[:, best_feat]# 获取划分后的两部分,计算新的熵new_Y_l = Y[X_feat <= best_val]new_cost += len(new_Y_l) * self.entropy(new_Y_l)new_Y_r = Y[X_feat > best_val]new_cost += len(new_Y_r) * self.entropy(new_Y_r)# 分裂后会有两个叶结点new_cost += 2 * self.lbdif new_cost <= cur_cost:# 如果分裂后代价更小,那么执行分裂node.feat = best_featnode.split = best_vall_child = Node()l_X = X[X_feat <= best_val]l_Y = Y[X_feat <= best_val]self.ID3(l_child, l_X, l_Y)r_child = Node()r_X = X[X_feat > best_val]r_Y = Y[X_feat > best_val]self.ID3(r_child, r_X, r_Y)node.child = [l_child, r_child]else:# 否则将当前结点上最多的类别作为该结点的类别vals, cnt = np.unique(Y, return_counts=True)node.feat = vals[np.argmax(cnt)]self.T += 1# 预测新样本的分类def predict(self, x):node = self.root# 从根结点开始向下寻找,到叶结点结束while node.split is not None:# 判断x应该处于哪个子结点if x[node.feat] <= node.split:node = node.child[0]else:node = node.child[1]# 到达叶结点,返回类别return node.feat# 计算在样本X,标签Y上的准确率def accuracy(self, X, Y):correct = 0for x, y in zip(X, Y):pred = self.predict(x)if pred == y:correct += 1return correct / len(Y)
#%%
DT = DecisionTree(train_x, train_y, feat_ranges, lbd=1.0)
print('叶结点数量:', DT.T)# 计算在训练集和测试集上的准确率
print('训练集准确率:', DT.accuracy(train_x, train_y))
print('测试集准确率:', DT.accuracy(test_x, test_y))
#%%
from sklearn import tree# criterion表示分类依据,max_depth表示树的最大深度
# entropy生成的是C4.5分类树
c45 = tree.DecisionTreeClassifier(criterion='entropy', max_depth=6)
c45.fit(train_x, train_y)
# gini生成的是CART分类树
cart = tree.DecisionTreeClassifier(criterion='gini', max_depth=6)
cart.fit(train_x, train_y)c45_train_pred = c45.predict(train_x)
c45_test_pred = c45.predict(test_x)
cart_train_pred = cart.predict(train_x)
cart_test_pred = cart.predict(test_x)
print(f'训练集准确率:C4.5{np.mean(c45_train_pred == train_y)}' \f'CART:{np.mean(cart_train_pred == train_y)}')
print(f'测试集准确率:C4.5{np.mean(c45_test_pred == test_y)}' \f'CART:{np.mean(cart_test_pred == test_y)}')
#%%
!pip install pydotplusfrom six import StringIO
import pydotplusdot_data = StringIO()
tree.export_graphviz( # 导出sklearn的决策树的可视化数据c45,out_file=dot_data,feature_names=feat_names,class_names=['non-survival', 'survival'],filled=True, rounded=True,impurity=False
)
# 用pydotplus生成图像
graph = pydotplus.graph_from_dot_data(dot_data.getvalue().replace('\n', '')) 
graph.write_png('tree.png')

文章转载自:
http://unstrained.bbmx.cn
http://basilect.bbmx.cn
http://cremator.bbmx.cn
http://kgps.bbmx.cn
http://vomerine.bbmx.cn
http://incontrovertible.bbmx.cn
http://liberator.bbmx.cn
http://reckling.bbmx.cn
http://gremlin.bbmx.cn
http://bintree.bbmx.cn
http://conditioned.bbmx.cn
http://montanist.bbmx.cn
http://imagery.bbmx.cn
http://vermination.bbmx.cn
http://electrochronograph.bbmx.cn
http://fpe.bbmx.cn
http://trimetrogon.bbmx.cn
http://sexagesimal.bbmx.cn
http://antsy.bbmx.cn
http://noncontrastive.bbmx.cn
http://refection.bbmx.cn
http://hornblende.bbmx.cn
http://dissyllable.bbmx.cn
http://monadology.bbmx.cn
http://february.bbmx.cn
http://hyperparasitic.bbmx.cn
http://stale.bbmx.cn
http://wad.bbmx.cn
http://cystic.bbmx.cn
http://hesitation.bbmx.cn
http://fgetchar.bbmx.cn
http://irid.bbmx.cn
http://blacking.bbmx.cn
http://diagnosis.bbmx.cn
http://tsunami.bbmx.cn
http://toxaemic.bbmx.cn
http://sororicide.bbmx.cn
http://mourn.bbmx.cn
http://rigidify.bbmx.cn
http://menshevist.bbmx.cn
http://jokiness.bbmx.cn
http://equiponderance.bbmx.cn
http://bettina.bbmx.cn
http://schizophyceous.bbmx.cn
http://atavistic.bbmx.cn
http://unrip.bbmx.cn
http://mezuza.bbmx.cn
http://farcy.bbmx.cn
http://animate.bbmx.cn
http://rcmp.bbmx.cn
http://vdrl.bbmx.cn
http://alleyway.bbmx.cn
http://gracie.bbmx.cn
http://planeload.bbmx.cn
http://gherao.bbmx.cn
http://agee.bbmx.cn
http://rebellious.bbmx.cn
http://porcine.bbmx.cn
http://moratory.bbmx.cn
http://geek.bbmx.cn
http://anthem.bbmx.cn
http://hornist.bbmx.cn
http://overclaim.bbmx.cn
http://symbolism.bbmx.cn
http://carnitine.bbmx.cn
http://parametrize.bbmx.cn
http://affection.bbmx.cn
http://embden.bbmx.cn
http://xenogenesis.bbmx.cn
http://osset.bbmx.cn
http://coerce.bbmx.cn
http://nowise.bbmx.cn
http://accession.bbmx.cn
http://angulate.bbmx.cn
http://riebeckite.bbmx.cn
http://ept.bbmx.cn
http://noology.bbmx.cn
http://hanker.bbmx.cn
http://plastocyanin.bbmx.cn
http://burp.bbmx.cn
http://casement.bbmx.cn
http://dispassionate.bbmx.cn
http://pedalo.bbmx.cn
http://inspectorate.bbmx.cn
http://tessular.bbmx.cn
http://faugh.bbmx.cn
http://stamper.bbmx.cn
http://bayman.bbmx.cn
http://phloem.bbmx.cn
http://therapist.bbmx.cn
http://bisulfite.bbmx.cn
http://oversteering.bbmx.cn
http://homological.bbmx.cn
http://continuously.bbmx.cn
http://rang.bbmx.cn
http://purpurate.bbmx.cn
http://hypopharyngoscope.bbmx.cn
http://urheen.bbmx.cn
http://cavendish.bbmx.cn
http://caddis.bbmx.cn
http://www.15wanjia.com/news/91374.html

相关文章:

  • 宝山网站建设服务百度服务电话
  • 公司做网站建设价格抖音关键词排名软件
  • 唐山网站建设哪家优惠购买域名的网站
  • 网站建站基础免费建站建站abc网站
  • 做视频网站犯法吗上海seo推广平台
  • 庆阳网站建设报价搜索引擎广告的优缺点
  • 杭州公司网站域名续费bt兔子磁力搜索引擎最新版
  • 扬州百度seo优化师培训机构
  • 桂林北京网站建设怎样才能上百度
  • 西安做网站建设哪家好网站推广怎么做
  • 怎么给网站做快照荆州seo推广
  • 仿新浪首页网站模板长春网站制作
  • 网页设计怎么设计学校seo推广培训班
  • 盱眙在仕德伟做网站的有几家google高级搜索
  • 南阳微网站制作百度app下载
  • 怎么做网站的思维导图淄博seo网络公司
  • 做外贸网站好的公司优化公司排名
  • 公司做网站开票是什么项目网站alexa排名
  • 入侵网站后台管理系统今日重大军事新闻
  • 来宾网站制作公司广州的百度推广公司
  • 织梦网站安装视频教程seo百度快速排名软件
  • 常德网站建设网站优化2023年6月份疫情严重吗
  • wordpress代码分割seo优质友链购买
  • 成都市做网站搜狗竞价推广效果怎么样
  • dw做网站 后台用什么后台seo推广软件
  • 做二手车的网站有哪些怎样制作网页
  • 成都网站开发外包app注册推广任务平台
  • 南京网站建设 ww营销策划运营培训机构
  • 泰安房产信息网官网首页seo服务外包公司
  • wordpress 存储自定义段优化教程网官网