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

需要做个网站站长之家新网址

需要做个网站,站长之家新网址,人力社保网站建设的意义,广州番禺区属于什么风险地区第1关#xff1a;什么是决策树 1.AB 2.B 第2关#xff1a;信息熵与信息增益 import numpy as npdef calcInfoGain(feature, label, index):计算信息增益:param feature:测试用例中字典里的feature#xff0c;类型为ndarray:param label:测试用例中字典里的label#xf…第1关什么是决策树 1.AB 2.B 第2关信息熵与信息增益 import numpy as npdef calcInfoGain(feature, label, index):计算信息增益:param feature:测试用例中字典里的feature类型为ndarray:param label:测试用例中字典里的label类型为ndarray:param index:测试用例中字典里的index即feature部分特征列的索引。该索引指的是feature中第几个特征如index:0表示使用第一个特征来计算信息增益。:return:信息增益类型float# 计算熵def calcInfoEntropy(feature, label):计算信息熵:param feature:数据集中的特征类型为ndarray:param label:数据集中的标签类型为ndarray:return:信息熵类型floatlabel_set set(label)#创建一个无序不重复的元素集result 0#统计不同标签各自的数量一般为0和1for l in label_set:count 0for j in range(len(label)):if label[j] l:count 1# 计算标签在数据集中出现的概率p count / len(label)# 计算熵result - p * np.log2(p)return result# 计算条件熵def calcHDA(feature, label, index, value):计算信息熵:param feature:数据集中的特征类型为ndarray:param label:数据集中的标签类型为ndarray:param index:需要使用的特征列索引类型为int:param value:index所表示的特征列中需要考察的特征值类型为int:return:信息熵类型floatcount 0# sub_feature和sub_label表示根据特征列和特征值#分割出的子数据集中的特征和标签sub_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 * e#######请计算信息增益#############*********** Begin ***********#values []#定义一个列表存放index列即特征列的所有特征for i in range(len(feature)):values.append(feature[i][index])values_list set(values)#创建一个无序不重复的元素集g calcInfoEntropy(feature, label)#计算总熵for i in values_list:g - calcHDA(feature, label, index, i)#总熵-每个特征的条件熵return g#得到信息增益#*********** End *************#第3关使用ID3算法构建决策树 import numpy as np class DecisionTree(object):def __init__(self):#决策树模型self.tree {}def calcInfoGain(self, feature, label, index):计算信息增益:param feature:测试用例中字典里的feature类型为ndarray:param label:测试用例中字典里的label类型为ndarray:param index:测试用例中字典里的index即feature部分特征列的索引。该索引指的是feature中第几个特征如index:0表示使用第一个特征来计算信息增益。:return:信息增益类型float# 计算熵def calcInfoEntropy(label):计算信息熵:param label:数据集中的标签类型为ndarray:return:信息熵类型floatlabel_set set(label)result 0for l in label_set:count 0for j in range(len(label)):if label[j] l:count 1# 计算标签在数据集中出现的概率p count / len(label)# 计算熵result - p * np.log2(p)return result# 计算条件熵def calcHDA(feature, label, index, value):计算信息熵:param feature:数据集中的特征类型为ndarray:param label:数据集中的标签类型为ndarray:param index:需要使用的特征列索引类型为int:param value:index所表示的特征列中需要考察的特征值类型为int:return:信息熵类型floatcount 0# sub_feature和sub_label表示根据特征列和特征值分割出的子数据集中的特征和标签sub_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_label)return pHA * ebase_e calcInfoEntropy(label)f np.array(feature)# 得到指定特征列的值的集合f_set set(f[:, index])sum_HDA 0# 计算条件熵for value in f_set:sum_HDA calcHDA(feature, label, index, value)# 计算信息增益return base_e - sum_HDA# 获得信息增益最高的特征def 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 createTree(self, feature, label):# 样本里都是同一个label没必要继续分叉了if len(set(label)) 1:return label[0]# 样本中只有一个特征或者所有样本的特征都一样的话就看哪个label的票数高if len(feature[0]) 1 or len(np.unique(feature, axis0)) 1:vote {}for l in 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_label# 根据信息增益拿到特征的索引best_feature self.getBestFeature(feature, label)tree {best_feature: {}}f np.array(feature)# 拿到bestfeature的所有特征值f_set set(f[:, best_feature])# 构建对应特征值的子样本集sub_feature, sub_labelfor v in f_set:sub_feature []sub_label []for i in range(len(feature)):if feature[i][best_feature] v:sub_feature.append(feature[i])sub_label.append(label[i])# 递归构建决策树tree[best_feature][v] self.createTree(sub_feature, sub_label)return treedef fit(self, feature, label)::param feature: 训练集数据类型为ndarray:param label:训练集标签类型为ndarray:return: None#************* Begin ************#self.tree self.createTree(feature, label)#************* End **************#def predict(self, feature)::param feature:测试集数据类型为ndarray:return:预测结果如np.array([0, 1, 2, 2, 1, 0])#************* Begin ************#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) 第4关信息增益率 import numpy as npdef calcInfoGain(feature, label, index):计算信息增益:param feature:测试用例中字典里的feature类型为ndarray:param label:测试用例中字典里的label类型为ndarray:param index:测试用例中字典里的index即feature部分特征列的索引。该索引指的是feature中第几个特征如index:0表示使用第一个特征来计算信息增益。:return:信息增益类型float# 计算熵def calcInfoEntropy(label):计算信息熵:param label:数据集中的标签类型为ndarray:return:信息熵类型floatlabel_set set(label)result 0for l in label_set:count 0for j in range(len(label)):if label[j] l:count 1# 计算标签在数据集中出现的概率p count / len(label)# 计算熵result - p * np.log2(p)return result# 计算条件熵def calcHDA(feature, label, index, value):计算信息熵:param feature:数据集中的特征类型为ndarray:param label:数据集中的标签类型为ndarray:param index:需要使用的特征列索引类型为int:param value:index所表示的特征列中需要考察的特征值类型为int:return:信息熵类型floatcount 0# sub_label表示根据特征列和特征值分割出的子数据集中的标签sub_label []for i in range(len(feature)):if feature[i][index] value:count 1sub_label.append(label[i])pHA count / len(feature)e calcInfoEntropy(sub_label)return pHA * ebase_e calcInfoEntropy(label)f np.array(feature)# 得到指定特征列的值的集合,:表示获取所有行f_set set(f[:, index])#将不重复的特征值获取出来比如:男女sum_HDA 0# 计算条件熵for value in f_set:sum_HDA calcHDA(feature, label, index, value)# 计算信息增益return base_e - sum_HDAdef calcInfoGainRatio(feature, label, index):计算信息增益率:param feature:测试用例中字典里的feature类型为ndarray:param label:测试用例中字典里的label类型为ndarray:param index:测试用例中字典里的index即feature部分特征列的索引。该索引指的是feature中第几个特征如index:0表示使用第一个特征来计算信息增益。:return:信息增益率类型float#********* Begin *********#up calcInfoGain(feature, label, index)#信息增益率的分子#定义一个方法求分母中某个类型的个数(如求当v1时表示性别为男的)def dcon(feature,value):s 0for i in range(len(feature)):if feature[i][index] value:s 1else:passreturn s down 0#取出特征值该列所有数据values []for i in range(len(feature)):values.append(feature[i][index])values_set set(values)#使用set()过滤重复值得到特征值列中所有类型(如性别中男和女)#循环递归求出分母for value in values_set:down - (dcon(feature,value)/len(feature)) * np.log2(dcon(feature,value)/len(feature))#求得信息增益率gain up/downreturn gain#********* End *********#第5关基尼系数 import numpy as np def gini_index(label):unique_label list(set(label))gini 1for i in unique_label:p np.sum(label i)/len(label)gini -p**2return gini def calcGini(feature, label, index):计算基尼系数:param feature:测试用例中字典里的feature类型为ndarray:param label:测试用例中字典里的label类型为ndarray:param index:测试用例中字典里的index即feature部分特征列的索引。该索引指的是feature中第几个特征如index:0表示使用第一个特征来计算信息增益。:return:基尼系数类型float#********* Begin *********#unique_value list(set(feature[:, index]))gini2 0for value in unique_value:len_v np.sum(feature[:, index] value)gini2 (len_v/len(feature))*gini_index(label[feature[:, index] value])return gini2#********* End *********# 第6关预剪枝与后剪枝 import numpy as np from copy import deepcopy class DecisionTree(object):def __init__(self):#决策树模型self.tree {}def calcInfoGain(self, feature, label, index):计算信息增益:param feature:测试用例中字典里的feature类型为ndarray:param label:测试用例中字典里的label类型为ndarray:param index:测试用例中字典里的index即feature部分特征列的索引。该索引指的是feature中第几个特征如index:0表示使用第一个特征来计算信息增益。:return:信息增益类型float# 计算熵def calcInfoEntropy(feature, label):计算信息熵:param feature:数据集中的特征类型为ndarray:param label:数据集中的标签类型为ndarray:return:信息熵类型floatlabel_set set(label)result 0for l in label_set:count 0for j in range(len(label)):if label[j] l:count 1# 计算标签在数据集中出现的概率p count / len(label)# 计算熵result - p * np.log2(p)return result# 计算条件熵def calcHDA(feature, label, index, value):计算信息熵:param feature:数据集中的特征类型为ndarray:param label:数据集中的标签类型为ndarray:param index:需要使用的特征列索引类型为int:param value:index所表示的特征列中需要考察的特征值类型为int:return:信息熵类型floatcount 0# sub_feature和sub_label表示根据特征列和特征值分割出的子数据集中的特征和标签sub_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 0# 计算条件熵for value in f_set:sum_HDA calcHDA(feature, label, index, value)# 计算信息增益return base_e - sum_HDA# 获得信息增益最高的特征def 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_feature# 计算验证集准确率def 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):# 样本里都是同一个label没必要继续分叉了if len(set(train_label)) 1:return train_label[0]# 样本中只有一个特征或者所有样本的特征都一样的话就看哪个label的票数高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_label# 根据信息增益拿到特征的索引best_feature self.getBestFeature(train_feature, train_label)tree {best_feature: {}}f np.array(train_feature)# 拿到bestfeature的所有特征值f_set set(f[:, best_feature])# 构建对应特征值的子样本集sub_feature, sub_labelfor 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 tree# 后剪枝def 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 result# 剪枝def set_vote_label(tree, path, label):for i in range(len(path)-1):tree tree[path[i]]tree[path[len(path)-1]] vote_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)# 验证集准确率高于0.9才剪枝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)::param train_feature:训练集数据类型为ndarray:param train_label:训练集标签类型为ndarray:param val_feature:验证集数据类型为ndarray:param val_label:验证集标签类型为ndarray:return: None#************* Begin ************#self.tree self.createTree(train_feature, train_label)self.post_cut(val_feature, val_label)#************* End **************#def predict(self, feature)::param feature:测试集数据类型为ndarray:return:预测结果如np.array([0, 1, 2, 2, 1, 0])#************* Begin ************## 单个样本分类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)#************* End **************# 第7关鸢尾花识别 #********* Begin *********# import pandas as pd from sklearn.tree import DecisionTreeClassifierdf pd.read_csv(./step7/train_data.csv).as_matrix() label pd.read_csv(./step7/train_label.csv).as_matrix() df_test pd.read_csv(./step7/test_data.csv).as_matrix()ft DecisionTreeClassifier() ft.fit(df,label) result ft.predict(df_test)result pd.DataFrame({target:result}) result.to_csv(./step7/predict.csv, indexFalse) #********* End *********#
http://www.huolong8.cn/news/283442/

相关文章:

  • 免费自创网站沙漠风网站开发怎样
  • 算命手机网站开发福田瑞沃前四后四车价格
  • 怎样上传网站到百度知乎网站内容建设的逻辑
  • 网站经营内容做合成照片的国外网站
  • 手机 网站 翻页 外部做网站的技术理论
  • 成立网站是不是需要先成立公司手机网站竞价
  • 用cms做网站的具体步骤wordpress 主题和插件下载失败
  • 如何评判网站建设岗位网站 如何做后台维护
  • 建设一个直播网站如何更改网站关键词
  • 建设厅网站ca验证失败企业网站建设综合实训心得体会一千字
  • 亳州电商网站建设关于学校网站建设经费的申请
  • 郑州金水区做网站公司网站内容管理软件
  • 无锡网站建设xinysu上海企业云
  • 南宁高新区建设房产局网站wordpress整站源码带数据
  • 商标免费设计在线生成跟我学seo
  • 重庆当地网站杭州门户网站建设公司
  • 怎么用本机ip做网站wordpress add_theme_page
  • 自适应网站主要用什么做重庆潼南网站建设
  • python做网站设计云盘建设网站
  • 建设音乐网站的目的移动医护网站建设利弊
  • 网站建设收费标准教程百度应用app下载
  • 济南网站建设与优化淮北哪些企业做网站
  • 网站做下载word百度关键词优化企业
  • 电子商务类网站设计又快又好自助建站系统
  • asp.net做简易网站百度收录效果好的网站
  • 网站怎么制作软件陕西省建设厅网站查询
  • 成都网站制作公司智能手机网站模板
  • 单页面网站模板怎么做中国前十大投资公司
  • 济南网站建设内容设计企业推广品牌
  • 当地人做导游的旅游网站网站建设 流程