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

网站换域名 蜘蛛不来seo外链工具

网站换域名 蜘蛛不来,seo外链工具,北京网站制作培训学校,百度首页 百度决策树的原理 决策树算法是一种基于树结构的分类和回归算法。它通过对数据集进行递归地分割#xff0c;构建一个树形模型#xff0c;用于预测目标变量的值。 决策树的构建过程基于以下原理#xff1a; 1. 特征选择#xff1a;选择最佳的特征来进行数据集的分割。常用的…决策树的原理 决策树算法是一种基于树结构的分类和回归算法。它通过对数据集进行递归地分割构建一个树形模型用于预测目标变量的值。 决策树的构建过程基于以下原理     1. 特征选择选择最佳的特征来进行数据集的分割。常用的特征选择指标有信息增益、信息增益比、基尼指数等。     2. 样本划分根据选定的特征将数据集划分为不同的子集。每个子集中的样本具有相同的特征值。     3. 递归构建对每个子集递归地应用上述步骤直到满足终止条件例如达到最大深度、样本数小于阈值或者没有更多特征可供选择。     4. 叶节点生成当终止条件满足时将子集划分为叶节点该叶节点表示一个分类或回归结果。 在分类问题中每个叶节点表示一种类别在回归问题中每个叶节点表示一个数值。 决策树算法具有以下优点     1、可解释性强易于理解和解释生成的模型。     2、能够处理离散和连续型特征。     3、能够处理多输出问题。     4、对缺失值和异常值具有一定的鲁棒性鲁棒性是指一个系统或算法在面对噪声、异常值、失效或者意外情况时能够保持稳定的表现。 然而决策树算法也存在一些缺点     1、容易过拟合过拟合overfitting是指机器学习模型过于复杂过于精细地拟合了训练数据集中的每一个样本以至于在新的数据集上表现不佳的现象特别是在处理复杂数据集时。     2、对于包含大量特征的数据集决策树可能过于复杂容易产生过度分支。     3、对于类别数量不平衡的数据集决策树可能偏向于拟合样本较多的类别。 为了克服这些问题可以采用剪枝技术、随机森林小蒟蒻还没学等方法对决策树进行改进和优化。 决策树的构建 1. ID3算法ID3Iterative Dichotomiser 3是一种基于信息增益的决策树构建算法。它通过计算每个属性的信息增益来选择最优的划分属性递归地构建决策树。 2. C4.5算法C4.5是ID3算法的改进版本它使用信息增益率来选择最优的划分属性。与ID3相比C4.5还能处理缺失值并且支持连续型属性。 3. CART算法CARTClassification and Regression Trees是一种既能构建分类树又能构建回归树的决策树算法。CART算法通过基尼指数或均方差来选择最优的划分属性并采用二叉树结构进行构建。 以上是常见的决策树构建方法不同的算法在属性选择和剪枝策略上有所差异选择适合问题需求的方法可以提高决策树的性能和准确度。 本文以CART方法为例基于鸢尾花数据集实现CART分类决策树算法 一、CART决策树算法简介 CARTClassification and Regression Trees是一种常用的策树算法可以用于分类和回归问题。CART算法通过对数据集进行递归的二分划分构建出一棵二叉树模型。 CART算法的划分准则是基于Gini指数或基尼不纯度。在分类问题中Gini指数衡量了一个样本集合中不同类别样本的不均匀程度。选择划分特征时CART算法通过计算每个特征的Gini指数选择使得Gini指数最小的特征作为划分特征。 CART算法通过递归地对数据集进行划分直到满足停止条件。停止条件可以是达到最大深度、叶子节点的样本数小于某个阈值等。划分过程中每次选择Gini指数最小的特征进行划分并将数据集按照该特征的取值分为两部分。 对于分类问题CART算法构建出的决策树可以用于预测新样本的类别。对于回归问题CART算法构建出的决策树可以用于预测新样本的实数值。 CART算法具有较好的可解释性和较高的准确性在实际应用中被广泛使用。它能够处理离散和连续特征并且对异常值和缺失值具有较好的鲁棒性。同时CART算法还可以通过剪枝来提高模型的泛化能力避免过拟合问题。 二、基尼系数 基尼系数代表模型的不纯度基尼系数越小则不纯度越低。 在分类问题中假设有K个类样本点属于第k类的概率为pk则概率分布的基尼系数定义为: 对给定的样本集合D其基尼指数 三、CART决策树生成 1. 初始化将整个训练集作为输入数据选择一个目标变量分类问题中是分类变量回归问题中是连续变量。 2. 选择最佳切分特征根据某种指标如信息增益、基尼系数等计算每个特征的切分点选择最佳的特征和切分点作为当前节点的切分标准。 3. 根据切分标准将数据集分割为两个子集根据最佳切分特征和切分点将数据集划分为两个子集一个子集包含满足切分标准的样本另一个子集包含不满足切分标准的样本。 4. 递归生成子树对于每个子集重复步骤2和步骤3直到满足停止条件如达到预定的树深度、样本数量小于阈值等。 5. 构建决策树将生成的子树连接到当前节点上形成完整的决策树。 6. 剪枝处理对生成的决策树进行剪枝处理通过损失函数最小化或交叉验证选择最优的剪枝参数以避免过拟合。 7. 输出决策树模型将生成的决策树模型输出。  以上是CART决策树生成算法的基本流程它是一种基于贪心策略的自上而下生成方法。 四、CART决策树代码 手敲实现 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split import numpy as npclass Node: # 特征 阈值 标签 左子树 右子树def __init__(self, featureNone, thresholdNone, labelNone, leftNone, rightNone):self.feature featureself.threshold thresholdself.label labelself.left leftself.right rightclass DecisionTree:def __init__(self, max_depthNone):self.max_depth max_depth # 可以用于剪枝def _gini(self, y): # 计算基尼不纯度classes, counts np.unique(y, return_countsTrue) # 获取y中的所有唯一类别和它们对应的出现次数impurity 1 - np.sum((counts / np.sum(counts)) ** 2) # 根据基尼不纯度的公式计算不纯度值return impuritydef _best_split(self, X, y):best_gini float(inf)best_feature None # 最佳特征best_threshold None # 最佳分割点for feature in range(X.shape[1]): # X.shape[1]特征数量# thresholds代表鸢尾花的一列特征值(唯一值)thresholds:numpy.ndarray np.unique(X[:, feature]) # 获取该特征的所有唯一值作为候选分割点的阈值。for threshold in thresholds: # 遍历每个候选分割点的阈值。对于每个阈值根据特征值与阈值的比较将样本分为左子集和右子集。# 对于每个阈值根据特征值与阈值的比较将样本分为左子集和右子集。left_indices:bool X[:, feature] threshold # left_indices 是一个布尔数组表示哪些样本属于左子集。right_indices:bool X[:, feature] thresholdleft_gini self._gini(y[left_indices]) # 计算左子集的基尼系数基尼不纯度right_gini self._gini(y[right_indices]) # 计算右子集的基尼系数基尼不纯度根据左右子集的基尼系数和样本数量计算加权平均基尼系数 gini并与当前的最佳基尼系数 best_gini 进行比较。如果当前 gini 值小于 best_gini则更新 best_gini、best_feature 和 best_threshold。gini (left_gini * np.sum(left_indices) right_gini * np.sum(right_indices)) / len(y) # 加权平均基尼系数if gini best_gini:best_gini ginibest_feature featurebest_threshold thresholdreturn best_feature, best_threshold # 返回找到的最佳特征和最佳分割点的信息。def _build_tree(self, X, y, depth):# 检查是否达到了最大深度或者标签只有一种类别如果满足其中一种条件就创建一个叶子节点并将最常见的标签作为节点的标签值。if depth self.max_depth or len(np.unique(y)) 1: # 起到了剪枝的作用set(y)将列表 y 转换为一个集合。集合是无序且不包含重复元素的数据结构。y.tolist()将集合 y 转换为列表。这是因为集合对象本身不支持 count 方法而列表对象支持。y.tolist().count使用列表的 count 方法返回每个元素在列表中出现的次数。max(set(y), keyy.tolist().count)使用 max 函数根据元素的出现次数找出最大值并返回该元素。最终变量 label 将被赋值为列表 y 中出现次数最多的元素。label max(set(y), keyy.tolist().count)return Node(labellabel)feature, threshold self._best_split(X, y) # 最佳特征和最佳分割点的信息。if feature is None or threshold is None: # 起到了剪枝的作用label max(set(y), keyy.tolist().count)return Node(labellabel)# 代码根据分割特征和阈值将训练数据划分为左子节点和右子节点的索引。left_indices X[:, feature] threshold # left_indices 是一个布尔数组表示哪些样本属于左子集。right_indices X[:, feature] threshold# 递归调用 _build_tree 方法传入左子节点和右子节点对应的训练数据和标签以及增加了深度的值。left_node self._build_tree(X[left_indices], y[left_indices], depth1)right_node self._build_tree(X[right_indices], y[right_indices], depth1)# 代码创建一个节点对象并将分割特征、阈值、左子节点和右子节点赋值给节点对象并返回该节点。node Node(featurefeature, thresholdthreshold, leftleft_node, rightright_node)return nodedef fit(self, X, y): # fit方法用于训练模型self.root self._build_tree(X, y, 0) # _build_tree方法用于构建决策树的节点def _predict_single(self, x, node): # _predict_single方法用于递归地预测单个样本的类别# 如果 node.label 不是 None 的话就返回 node.labelif node.label is not None:return node.labelif x[node.feature] node.threshold:return self._predict_single(x, node.left)else:return self._predict_single(x, node.right)def predict(self, X): # 用于预测新的样本的类别y_pred []for x in X:label self._predict_single(x, self.root)y_pred.append(label)return np.array(y_pred)在预测过程中根据节点的特征和阈值将样本分配到左子树或右子树直到叶子节点得到最终的预测结果。最终将预测结果存储在y_pred列表中并返回一个numpy数组。# 加载鸢尾花数据集 iris load_iris() X iris.data y iris.target# 划分训练集和测试集 X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.3, random_state42)# 创建决策树模型并训练 tree DecisionTree(max_depth3) tree.fit(X_train, y_train)# 预测测试集 y_pred tree.predict(X_test)# 输出准确率 accuracy np.sum(y_pred y_test) / len(y_test) print(准确率:, accuracy) 运行结果 准确率: 1.0掉包实现 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score# 加载鸢尾花数据集 iris load_iris() X iris.data y iris.target# 将数据集拆分为训练集和测试集 X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.3, random_state42)# 创建决策树分类器 clf DecisionTreeClassifier()# 在训练集上训练决策树模型 clf.fit(X_train, y_train)# 在测试集上进行预测 y_pred clf.predict(X_test)# 计算准确率 accuracy accuracy_score(y_test, y_pred) print(准确率:, accuracy) 运行结果 准确率: 1.0与knn算法进行试验对比 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score# 加载鸢尾花数据集 iris load_iris() X, y iris.data, iris.target# 将数据集分为训练集和测试集 X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.3, random_state50)# 使用决策树算法进行训练和预测 dt_clf DecisionTreeClassifier() dt_clf.fit(X_train, y_train) dt_pred dt_clf.predict(X_test) dt_accuracy accuracy_score(y_test, dt_pred)# 使用knn算法进行训练和预测 knn_clf KNeighborsClassifier(n_neighbors5) knn_clf.fit(X_train, y_train) knn_pred knn_clf.predict(X_test) knn_accuracy accuracy_score(y_test, knn_pred)# 输出结果 print(决策树算法准确率, dt_accuracy) print(knn算法准确率, knn_accuracy) 运行结果 决策树算法准确率 0.9555555555555556 knn算法准确率 0.9333333333333333
http://wiki.neutronadmin.com/news/124089/

相关文章:

  • 国内网站免备案青岛城阳新闻最新消息
  • 微网站开发方案模板wordpress痞子
  • 网站cn和com有什么区别北京 做网站
  • 成都网站设计师聊城专业网站建设公司电话
  • 激励案例网站制作甘德网站建设
  • 杭州高端网站建设商务网站业务流程
  • 零壹网站建设如何选择一个优质网站建设公司
  • 企业网站缺点有没有wordpress上的论坛
  • 网站后台风格校园品牌推广方案
  • 开发公司绩效考核评分细则seo推广手段
  • 天津网站建设方案做体育赛事网站公司
  • 青海中小企业网站建设网站开发的各个阶段及其完成的任务
  • 深圳网站设计+建设首选wordpress the post
  • 上海松江网站设计公司青岛公司网站建设开发
  • 织梦网站程序下载ps个人网站怎么做
  • 网站营销建设策划案58同城广告推广电话
  • 中国广东手机网站建设wordpress页面半透明
  • 重庆网站运营我做推广找不到我的网站
  • 商城网站建设步骤活动拍摄
  • app建设网站公司简介网站图表怎么做的
  • 新手建站教程视频河北网站开发网站
  • 浙江建设信息港网站查询Wordpress付费置顶
  • 泉州设计网站做ppt兼职的网站有哪些
  • 专业做相册书的网站网站建设方为客户提供使用说明书
  • 网站代理被抓建站之星收费版
  • 深圳网站制作公司兴田德润官方网站上海做网站最专业
  • 企业的外币收入外管局网站做啥免认证域名
  • 电商主图设计网站电商运营新手要懂哪些
  • 描写做网站专业的句子优秀网格员推荐表范文
  • 网站代维护做的比较好的医院网站