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

上海那家网站做的好网页设计属于什么行业类别

上海那家网站做的好,网页设计属于什么行业类别,昆明网站开发培训,安装iis8 添加网站文章目录 第5关#xff1a;基尼系数代码 第6关#xff1a;预剪枝与后剪枝代码 第7关#xff1a;鸢尾花识别代码 第5关#xff1a;基尼系数 基尼系数 在ID3算法中我们使用了信息增益来选择特征#xff0c;信息增益大的优先选择。在C4.5算法中#xff0c;采用了信息增益率… 文章目录 第5关基尼系数代码 第6关预剪枝与后剪枝代码 第7关鸢尾花识别代码 第5关基尼系数 基尼系数 在ID3算法中我们使用了信息增益来选择特征信息增益大的优先选择。在C4.5算法中采用了信息增益率来选择特征以减少信息增益容易选择特征值多的特征的问题。但是无论是ID3还是C4.5,都是基于信息论的熵模型的这里面会涉及大量的对数运算。能不能简化模型同时也不至于完全丢失熵模型的优点呢当然有那就是基尼系数 CART算法使用基尼系数来代替信息增益率基尼系数代表了模型的不纯度基尼系数越小则不纯度越低特征越好。这和信息增益与信息增益率是相反的(它们都是越大越好)。 从公式可以看出相比于信息增益和信息增益率计算起来更加简单。举个例子还是使用第二关中提到过的数据集第一列是编号第二列是性别第三列是活跃度第四列是客户是否流失的标签0表示未流失1表示流失。 代码 import numpy as npdef calcGini(feature, label, index):计算基尼系数:param feature:测试用例中字典里的feature类型为ndarray:param label:测试用例中字典里的label类型为ndarray:param index:测试用例中字典里的index即feature部分特征列的索引。该索引指的是feature中第几个特征如index:0表示使用第一个特征来计算信息增益。:return:基尼系数类型float# 计算子集的基尼指数def calcGiniIndex(label_subset):total len(label_subset)if total 0:return 0label_counts np.bincount(label_subset)probabilities label_counts / totalgini 1.0 - np.sum(np.square(probabilities))return gini# 将feature和label转为numpy数组f np.array(feature)l np.array(label)# 得到指定特征列的值的集合unique_values np.unique(f[:, index])total_gini 0total_samples len(label)# 按照特征的每个唯一值划分数据集for value in unique_values:# 获取该特征值对应的样本索引subset_indices np.where(f[:, index] value)[0]# 获取对应的子集标签subset_label l[subset_indices]# 计算子集的基尼指数subset_gini calcGiniIndex(subset_label)# 加权计算总的基尼系数weighted_gini (len(subset_label) / total_samples) * subset_ginitotal_gini weighted_ginireturn total_gini 第6关预剪枝与后剪枝 为什么需要剪枝 决策树的生成是递归地去构建决策树直到不能继续下去为止。这样产生的树往往对训练数据有很高的分类准确率但对未知的测试数据进行预测就没有那么准确了也就是所谓的过拟合。 决策树容易过拟合的原因是在构建决策树的过程时会过多地考虑如何提高对训练集中的数据的分类准确率从而会构建出非常复杂的决策树树的宽度和深度都比较大。在之前的实训中已经提到过模型的复杂度越高模型就越容易出现过拟合的现象。所以简化决策树的复杂度能够有效地缓解过拟合现象而简化决策树最常用的方法就是剪枝。剪枝分为预剪枝与后剪枝。 预剪枝 预剪枝的核心思想是在决策树生成过程中对每个结点在划分前先进行一个评估若当前结点的划分不能带来决策树泛化性能提升则停止划分并将当前结点标记为叶结点。 想要评估决策树算法的泛化性能如何方法很简单。可以将训练数据集中随机取出一部分作为验证数据集然后在用训练数据集对每个结点进行划分之前用当前状态的决策树计算出在验证数据集上的正确率。正确率越高说明决策树的泛化性能越好如果在划分结点的时候发现泛化性能有所下降或者没有提升时说明应该停止划分并用投票计数的方式将当前结点标记成叶子结点。 举个例子假如上一关中所提到的用来决定是否买西瓜的决策树模型已经出现过拟合的情况模型如下 假设当模型在划分是否便宜这个结点前模型在验证数据集上的正确率为0.81。但在划分后模型在验证数据集上的正确率降为0.67。此时就不应该划分是否便宜这个结点。所以预剪枝后的模型如下 从上图可以看出预剪枝能够降低决策树的复杂度。这种预剪枝处理属于贪心思想但是贪心有一定的缺陷就是可能当前划分会降低泛化性能但在其基础上进行的后续划分却有可能导致性能显著提高。所以有可能会导致决策树出现欠拟合的情况。 后剪枝 后剪枝是先从训练集生成一棵完整的决策树然后自底向上地对非叶结点进行考察若将该结点对应的子树替换为叶结点能够带来决策树泛化性能提升则将该子树替换为叶结点。 后剪枝的思路很直接对于决策树中的每一个非叶子结点的子树我们尝试着把它替换成一个叶子结点该叶子结点的类别我们用子树所覆盖训练样本中存在最多的那个类来代替这样就产生了一个简化决策树然后比较这两个决策树在测试数据集中的表现如果简化决策树在验证数据集中的准确率有所提高那么该子树就可以替换成叶子结点。该算法以bottom-up的方式遍历所有的子树直至没有任何子树可以替换使得测试数据集的表现得以改进时算法就可以终止。 从后剪枝的流程可以看出后剪枝是从全局的角度来看待要不要剪枝所以造成欠拟合现象的可能性比较小。但由于后剪枝需要先生成完整的决策树然后再剪枝所以后剪枝的训练时间开销更高。 代码 import numpy as np from copy import deepcopyclass DecisionTree(object):def __init__(self):# 决策树模型self.tree {}def calcInfoGain(self, feature, label, index):# 计算信息增益的代码def calcInfoEntropy(feature, label):# 计算信息熵label_set set(label)result 0for l in label_set:count 0for j in range(len(label)):if label[j] l:count 1p count / len(label)result - p * np.log2(p)return resultdef calcHDA(feature, label, index, value):# 计算条件熵count 0sub_feature []sub_label []for i in range(len(feature)):if feature[i][index] value:count 1sub_feature.append(feature[i])sub_label.append(label[i])pHA count / len(feature)e calcInfoEntropy(sub_feature, sub_label)return pHA * ebase_e calcInfoEntropy(feature, label)f np.array(feature)f_set set(f[:, index])sum_HDA 0for value in f_set:sum_HDA calcHDA(feature, label, index, value)return base_e - sum_HDAdef getBestFeature(self, feature, label):max_infogain 0best_feature 0for i in range(len(feature[0])):infogain self.calcInfoGain(feature, label, i)if infogain max_infogain:max_infogain infogainbest_feature ireturn best_featuredef calc_acc_val(self, the_tree, val_feature, val_label):# 计算验证集准确率result []def classify(tree, feature):if not isinstance(tree, dict):return treet_index, t_value list(tree.items())[0]f_value feature[t_index]if isinstance(t_value, dict):classLabel classify(tree[t_index][f_value], feature)return classLabelelse:return t_valuefor f in val_feature:result.append(classify(the_tree, f))result np.array(result)return np.mean(result val_label)def createTree(self, train_feature, train_label):# 创建决策树if len(set(train_label)) 1:return train_label[0]if len(train_feature[0]) 1 or len(np.unique(train_feature, axis0)) 1:vote {}for l in train_label:if l in vote.keys():vote[l] 1else:vote[l] 1max_count 0vote_label Nonefor k, v in vote.items():if v max_count:max_count vvote_label kreturn vote_labelbest_feature self.getBestFeature(train_feature, train_label)tree {best_feature: {}}f np.array(train_feature)f_set set(f[:, best_feature])for v in f_set:sub_feature []sub_label []for i in range(len(train_feature)):if train_feature[i][best_feature] v:sub_feature.append(train_feature[i])sub_label.append(train_label[i])tree[best_feature][v] self.createTree(sub_feature, sub_label)return treedef post_cut(self, val_feature, val_label):# 剪枝相关代码def get_non_leaf_node_count(tree):non_leaf_node_path []def dfs(tree, path, all_path):for k in tree.keys():if isinstance(tree[k], dict):path.append(k)dfs(tree[k], path, all_path)if len(path) 0:path.pop()else:all_path.append(path[:])dfs(tree, [], non_leaf_node_path)unique_non_leaf_node []for path in non_leaf_node_path:isFind Falsefor p in unique_non_leaf_node:if path p:isFind Truebreakif not isFind:unique_non_leaf_node.append(path)return len(unique_non_leaf_node)def get_the_most_deep_path(tree):non_leaf_node_path []def dfs(tree, path, all_path):for k in tree.keys():if isinstance(tree[k], dict):path.append(k)dfs(tree[k], path, all_path)if len(path) 0:path.pop()else:all_path.append(path[:])dfs(tree, [], non_leaf_node_path)max_depth 0result Nonefor path in non_leaf_node_path:if len(path) max_depth:max_depth len(path)result pathreturn resultdef set_vote_label(tree, path, label):for i in range(len(path)-1):tree tree[path[i]]tree[path[len(path)-1]] labelacc_before_cut self.calc_acc_val(self.tree, val_feature, val_label)for _ in range(get_non_leaf_node_count(self.tree)):path get_the_most_deep_path(self.tree)tree deepcopy(self.tree)step deepcopy(tree)for k in path:step step[k]vote_label sorted(step.items(), keylambda item: item[1], reverseTrue)[0][0]set_vote_label(tree, path, vote_label)acc_after_cut self.calc_acc_val(tree, val_feature, val_label)if acc_after_cut acc_before_cut:set_vote_label(self.tree, path, vote_label)acc_before_cut acc_after_cutdef fit(self, train_feature, train_label, val_feature, val_label):# 训练决策树模型self.tree self.createTree(train_feature, train_label)self.post_cut(val_feature, val_label)def predict(self, feature):# 预测函数result []def classify(tree, feature):if not isinstance(tree, dict):return treet_index, t_value list(tree.items())[0]f_value feature[t_index]if isinstance(t_value, dict):classLabel classify(tree[t_index][f_value], feature)return classLabelelse:return t_valuefor f in feature:result.append(classify(self.tree, f))return np.array(result) 第7关鸢尾花识别 掌握如何使用sklearn提供的DecisionTreeClassifier 数据简介 鸢尾花数据集是一类多重变量分析的数据集。通过花萼长度花萼宽度花瓣长度花瓣宽度4个属性预测鸢尾花卉属于(SetosaVersicolourVirginica)三个种类中的哪一类(其中分别用012代替)。 数据集中部分数据与标签如下图所示 DecisionTreeClassifier DecisionTreeClassifier的构造函数中有两个常用的参数可以设置 criterion:划分节点时用到的指标。有gini基尼系数,entropy(信息增益)。若不设置默认为gini max_depth:决策树的最大深度如果发现模型已经出现过拟合可以尝试将该参数调小。若不设置默认为None 和sklearn中其他分类器一样DecisionTreeClassifier类中的fit函数用于训练模型fit函数有两个向量输入 X大小为[样本数量,特征数量]的ndarray存放训练样本 Y值为整型大小为[样本数量]的ndarray存放训练样本的分类标签。 DecisionTreeClassifier类中的predict函数用于预测返回预测标签predict函数有一个向量输入 X大小为[样本数量,特征数量]的ndarray存放预测样本。 DecisionTreeClassifier的使用代码如下 from sklearn.tree import DecisionTreeClassifier clf tree.DecisionTreeClassifier() clf.fit(X_train, Y_train) result clf.predict(X_test)代码 #********* Begin *********# import pandas as pd from sklearn.tree import DecisionTreeClassifiertrain_df pd.read_csv(./step7/train_data.csv).as_matrix() train_label pd.read_csv(./step7/train_label.csv).as_matrix() test_df pd.read_csv(./step7/test_data.csv).as_matrix()dt DecisionTreeClassifier() dt.fit(train_df, train_label) result dt.predict(test_df)result pd.DataFrame({target:result}) result.to_csv(./step7/predict.csv, indexFalse) #********* End *********#
http://www.w-s-a.com/news/548060/

相关文章:

  • 黄石下陆区建设局网站wordpress如何拖移小工具
  • 宁波网站建设信息网站开发看书
  • 网站建设优化价格北京优化seo排名
  • 微信网站建设公司费用高端网站建设 炫酷
  • 北京网站假设销售找客户最好的app
  • 做外贸需要关注的网站有什么好处宜州设计公司
  • 公司最近想做个网站怎么办陕西科强建设工程有限公司官方网站
  • 生态城门户网站 建设动态it外包收费
  • 网站项目评价老渔哥网站建设公司
  • 哈尔滨寸金网站建设价格178软文网
  • 一个网站建设的成本网站开发过程及要点
  • 监控视频做直播网站中国建筑人才网下载
  • 网站建设公司华网天下买送活动集团网站设计案例
  • 哪些网站比较容易做哪个网站做中高端衣服
  • 做php网站教程wordpress去水印
  • 深圳微网站建设公司哪家好潍坊专业做网站的公司
  • 网站的弹窗广告怎么做软件开发包括
  • 网站开发人员保密做最优秀的自己演讲视频网站
  • 一般做网站要多少钱怎样选择高性价比的建站公司
  • 免费私人网站建设软件高端网站设计平台高端网站设计企业
  • 响应式网站建设的应用场景怎么申请电商平台
  • 怎么做垂直自营网站游戏咨询网站建设目标是什么
  • 建设网站需要给钱吗建立网站三大基础
  • 金融公司网站 htmlwordpress 防火墙
  • 重庆智能建站模板网站投票系统 js
  • 网站维护的内容和步骤网站做什么内容
  • 万网虚拟主机建网站wordpress协调世界时
  • 微网站建设方式应用大全网站
  • 网站速度测速织梦模板下载
  • 环保网站建设公司排名汉阴网站建设