机器学习——决策树
决策树
- 一、什么是决策树
- 二、决策树剪枝
- 三、决策树的三种常用算法
- 1. ID3
- (1)定义
- (2)知识点
- 信息熵
- 信息增益
- (3)步骤
- 决策树的构造
- 使用决策树执行分类
- 使用Matplotlib注解绘制树形图
- (4)使用自己的数据集
- 2. C4.5
- (1)定义
- (2)公式
- (3)代码
- 3. CART
- (1)概念
- (2)代码实现
- (3)运行结果
一、什么是决策树
(1)决策树,就是一个类似于流程图的树形结构,树内部的每一个节点代表的是对一个特征的测试,树的分支代表该特征的每一个测试结果,而树的每一个叶子节点代表一个类别。树的最高层是就是根节点。
使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。
(2)对比kNN kNN可以完成很多分类任务,但是最大的缺点是无法给出数据的内在含义,而决策树的主要优势就在于数据形式非常容易理解。
(3)下图即为一个决策树的示意描述,内部节点用矩形表示,叶子节点用椭圆表示。
(4)决策树可能会出现过拟合的问题,解决的策略是剪枝。 剪枝是决策树停止分支的方法之一,剪枝有分预先剪枝和后剪枝两种。预先剪枝是在树的生长过程中设定一个指标,当达到该指标时就停止生长,这样做容易产生“视界局限”,就是一旦停止分支,使得节点N成为叶节点,就断绝了其后继节点进行“好”的分支操作的任何可能性。不严格的说这些已停止的分支会误导学习算法,导致产生的树不纯度降差最大的地方过分靠近根节点。后剪枝中树首先要充分生长,直到叶节点都有最小的不纯度值为止,因而可以克服“视界局限”。然后对所有相邻的成对叶节点考虑是否消去它们,如果消去能引起令人满意的不纯度增长,那么执行消去,并令它们的公共父节点成为新的叶节点。这种“合并”叶节点的做法和节点分支的过程恰好相反,经过剪枝后叶节点常常会分布在很宽的层次上,树也变得非平衡。后剪枝技术的优点是克服了“视界局限”效应,而且无需保留部分样本用于交叉验证,所以可以充分利用全部训练集的信息。但后剪枝的计算量代价比预剪枝方法大得多,特别是在大样本集中,不过对于小样本的情况,后剪枝方法还是优于预剪枝方法的。
二、决策树剪枝
1.由于噪声等因素的影响,会使得样本某些特征的取值与样本自身的类别不相匹配的情况,基于这些数据生成的决策树的某些枝叶会产生一些错误;尤其是在决策树靠近枝叶的末端,由于样本变少,这种无关因素的干扰就会突显出来;由此产生的决策树可能存在过拟合的现象。树枝修剪就是通过统计学的方法删除不可靠的分支,使得整个决策树的分类速度和分类精度得到提高。
2.为什么要剪枝:决策树过拟合风险很大,理论上可以完全分得开数据。(想象一下,如果树足够庞大,每个叶子节点不就一个数据了嘛)
- 剪枝策略:预剪枝,后剪枝
(1)预剪枝:边建立决策树边进行剪枝的操作(更实用)
在决策树生成分支的过程,除了要进行基础规则的判断外,还需要利用统计学的方法对即将分支的节点进行判断,比如统计χ2或统计信息增益,如果分支后使得子集的样本统计特性不满足规定的阈值,则停止分支;但是阈值如何选取才合理是比较困难的。
(2)后剪枝:当建立完决策树后来进行剪枝操作
在决策树充分生长后,修剪掉多余的分支。根据每个分支的分类错误率及每个分支的权重,计算该节点不修剪时预期分类错误率;对于每个非叶节点,计算该节点被修剪后的分类错误率,如果修剪后分类错误率变大,即放弃修剪;否则将该节点强制为叶节点,并标记类别。产生一系列修剪过的决策树候选之后,利用测试数据(未参与建模的数据)对各候选决策树的分类准确性进行评价,保留分类错误率最小的决策树。
三、决策树的三种常用算法
三种属性划分方法:信息增益:ID3;信息增益率:C4.5;基尼指数:CART。
划分数据集的最大原则是:将无序的数据变得更加有序。
1. ID3
(1)定义
D3算法的核心是在决策树各个节点上应用信息增益准则来选择特征,递归的构建决策树。 具体方法是:从根节点开始,对节点计算所有可能的特征的信息增益,选择信息增益最大的特征作为节点的特征,由该特征的不同取值建立子节点:再对子节点递归的调用以上方法,构建决策树:直到所有的特征信息增益均很小或没有特征可以选择为止。
缺点
从上图中,我们可以看出,选择ID作为特征,信息增益最大,可是从业务的角度的看,这个特征意义不大,每个ID必然只对应一个类别。故信息增益的问题的就从这里引发出来,它的缺点就是偏向选择取值较多的属性,这种算法本身有一种倾向性,所以改进之后的算法在后面会讲到是C4.5。
(2)知识点
信息熵
熵定义为信息的期望值,集合信息的度量方式。首先我们先要明确信息的定义。如果待分类的事务可能划分在多个分类之中,则符号xix_{i}xi的信息定义为
l(xi)=−log2p(xi)l(x_{i}) = -log_{2}p(x_{i})l(xi)=−log2p(xi),
其中p(xi)p(x_{i})p(xi)是选择该分类的概率。
“信息嫡”是度量样本集合纯度最常用的一种指标,为了计算熵,我们需要计算所有类别所有可能值包含的信息期望值,假定当前样本集合D中第k类样本所占的比例为p:(K=1,2,…yl),则D的信息嫡定义为
Ent(D)=−∑k=1∣y∣pklog2pkEnt(D) = -\sum_{k=1}^{\left | y \right |}p_{k}log_{2}p_{k}Ent(D)=−∑k=1∣y∣pklog2pk
Ent(D)的值越小,则D的纯度越高,计算信息嫡时约定:若p=0,则plog2pplog_{2}pplog2p = 0。当p=1或p=0时,Ent(D)取到最小值为0,完全没有不确定性;当p=0.5时,取到最大值为log2∣y∣log_{2}{\left | y \right |}log2∣y∣,此时最为混乱,事件最不确定。
信息增益
在划分数据集之前之后信息发生的变化称为信息增益。获得信息增益最高的特征就是最好的选择。
离散属性a有V个可能的取值{a’ , a2,…, a,用a来进行划分,则会产生V个分支结点,其中第v个分支结点包含了D中所有在属性a上取值为a的样本,记为Dv。则可计算出用属性a对样本集D进行划分所获得的“信息增益”:
Gain(D,a)=Ent(D)−∑v=1V∣Dv∣∣D∣Ent(Dv)Gain(D,a) = Ent(D)-\sum_{v=1}^{V}\frac{\left | D^{v} \right |}{\left | D \right |}Ent(D^{v})Gain(D,a)=Ent(D)−∑v=1V∣D∣∣Dv∣Ent(Dv)
为分支结点权重,样本数越多的分支结点的影响越大
一般而言,信息增益越大,则意味着使用属性a来进行划分所获得的“纯度提升”越大。
(3)步骤
决策树的构造
- 计算给定数据集的香农熵
from math import log
#计算给定数据集的香农熵
def calcShannonEnt(dataSet):#计算数据集中实例的总数numEntries = len(dataSet)#建立一个空字典,准备装原始数据的每种分类的数目,"yes"=是,"no"=否labelCounts = {}for featVec in dataSet:#取每组数据的最后一个值,作为标签currentLabel = featVec[-1]#如果标签不在创建的字典中,则添加进去if currentLabel not in labelCounts.keys():labelCounts[currentLabel] = 0labelCounts[currentLabel] += 1shannonEnt = 0.0#print(labelCounts)for key in labelCounts:#计算标签占总数据的比例prob = float(labelCounts[key])/numEntries#求熵公式shannonEnt -= prob * log(prob,2)return shannonEnt
创建一个数据集,该数据集有2个特征,分别代表是否可以浮出水面、是否有脚蹼。用1代表是,0代表否。最后一列数据表示当前样本是否为鱼类。
数据要求: 一是数据必须是一种由列表元素组成的列表,而且所有的列表元素都要具有相同的数据长度;二是数据的最后一列或者每个实例的最后一个元素是当前实例的类别标签。
#创建数据
def createDataSet():dataSet = [[1, 1, 'yes'],#例如这个样本点代表不能浮出水面、有脚蹼,是鱼类[1, 1, 'yes'],[1, 0, 'no'],[0, 1, 'no'],[0, 1, 'no']]labels = ['no surfacing','flippers']#label记录样本的特征名称return dataSet, labels
测试计算出该数据集的熵
mydata,labels=createDataSet()
print(calcShannonEnt(mydata))
输出结果
当改变数据集第一个列表中的分类yes变为maybe
#创建数据
def createDataSet():dataSet = [[1, 1, 'maybe'], #例如这个样本点代表不能浮出水面、有脚蹼,是鱼类[1, 1, 'yes'],[1, 0, 'no'],[0, 1, 'no'],[0, 1, 'no']]labels = ['no surfacing','flippers']#label记录样本的特征名称return dataSet, labels
熵越高,说明数据越混乱,即分类更多了。
- 按照给定特征划分数据集
实现的逻辑是给定特征,并选取该特征下对应的某个值,依据该值将数据划分为子数据集,并将该特征维度给去除掉,用于进一步划分。
#按照给定特征划分数据集
def splitDataSet(dataSet, axis, value):#给定数据集、划分数据集的特征 、特征所对应的值 retDataSet = [] #创建一个备份数据集,避免原始数据被修改 for featVec in dataSet: #遍历数据集 if featVec[axis] == value: #该特征维度下和value值相等的样本划分到一起,并将该特征去除掉维度去掉 #将axis维度两边的数据进行拼接,就将该特征维度给去除掉 reducedFeatVec = featVec[:axis] #取得[0,axis)的一个列表 reducedFeatVec.extend(featVec[axis+1:]) #取得[axis+1,结束]的一个列表retDataSet.append(reducedFeatVec) return retDataSet
print(splitDataSet(mydata,0,1))
- 选择最好的数据集划分方式
然后遍历整个数据集,循环计算香农熵和splitDataSet()函数,找到最好的特征划分方式。
def chooseBestFeatureToSplit(dataSet): numFeatures = len(dataSet[0]) - 1 #numfeature为特征的维度,因为最后一列为标签,所以需要减去1 baseEntropy = calcShannonEnt(dataSet) #用来记录最小信息熵,初始值为原始数据集对应的信息熵 bestInfoGain = 0.0; bestFeature = -1 #信息增益初始化为0,最优的划分特征初始化为-1 for i in range(numFeatures): #遍历所有的特征 featList = [example[i] for example in dataSet] #创建list用来存每个样本在第i维度的特征值 uniqueVals = set(featList) #获取该特征下的所有不同的值,即根据该特征可以划分为几类 newEntropy = 0.0 #初始化熵为0 for value in uniqueVals: #遍历该特征维度下对应的所有特征值 subDataSet = splitDataSet(dataSet, i, value) #依据这个值,将样本划分为几个子集,有几个value,就有几个子集 prob = len(subDataSet)/float(len(dataSet)) #计算p值 newEntropy += prob * calcShannonEnt(subDataSet) #计算每个子集对应的信息熵,并全部相加,得到划分后数据的信息熵 infoGain = baseEntropy - newEntropy #将原数据的信息熵-划分后数据的信息熵,得到信息增益 if (infoGain > bestInfoGain): #如果这个信息增益比当前记录的最佳信息增益还大,就将该增益和划分依据的特征记录下来 bestInfoGain = infoGain bestFeature = i return bestFeature #returns an integer
运行结果为0,即第0个特征是最好的用于划分数据集的特征。
- 递归构建决策树
这里我们只是对于原始数据集选择出了一个特征进行划分,实际上如果划分后的样本还有多个类别,那么还必须进一步划分,因此需要递归创建出决策树。在给出最终创建决策树的代码前,首先解决一个问题,假设特征都用完标签还不唯一,这时又无法继续选择某特征进行划分,那么怎么办?解决的方法就是多数表决,在这个数据集中,哪个的标签最多,就设这个数据集就就代表着这一类别,这有些类似KNN的思想。
#处理完所有属性,类标签依然不唯一,多数表决
def majorityCnt(classList): classCount={} for vote in classList: if vote not in classCount.keys(): classCount[vote] = 0 classCount[vote] += 1 #计算每个标签对应的数目 sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)#从大到小进行排列 return sortedClassCount[0][0]#选出标签数量最多的返回
- 创建树
#创建树
def createTree(dataSet,labels): classList = [example[-1] for example in dataSet] #存储所有样本的标签 if classList.count(classList[0]) == len(classList): return classList[0] #如果所有的标签都是一样,就直接返回该子集的标签,这里用的方法是计算其中某个类别的标签数量,如果该数量就等于标签的总数,那容易知道,该数据集的类别标签是一样的 if len(dataSet[0]) == 1: #如果样本的特征值就剩一个,即样本长度为1,就停止,返回该数据集标签数目最多,作为该数据集的标签 return majorityCnt(classList) bestFeat = chooseBestFeatureToSplit(dataSet) #选取出该数据集最佳的划分特征 bestFeatLabel = labels[bestFeat] #得出该特征所对应的标签名称 myTree = {bestFeatLabel:{}} #创建mytree字典,这个字典将会一层套一层,这个看后面的结果就明白 del(labels[bestFeat]) #将这个最佳的划分特征从标签名称列表中删除,这是为了下次递归进来不会发生错误的引用,因为下面每次递归的数据集都会删除划分特征所对应的那一列 featValues = [example[bestFeat] for example in dataSet] #获取到该划分特征下对应的所有特征值 uniqueVals = set(featValues) #经过set去重,值代表着该特征能将当前的数据集划分成多少个不同的子集 for value in uniqueVals: #现在对划分的子集进一步进行划分,也就是递归的开始 subLabels = labels[:] #将样本标签复制给sublabels,这样就不会在每次的递归中改变原始labels myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet, bestFeat,value),subLabels)#将样本划分的子集再进行迭代 return myTree
测试结果
print(createTree(mydata,labels))
运行结果
使用决策树执行分类
递归调用
# 使用决策树的分类函数
def classify(inputTree,featLabels,testVec):firstStr = list(inputTree.keys())[0]# print(firstStr)secondDict = inputTree[firstStr]# print(secondDict)featIndex = featLabels.index(firstStr)# print(featIndex)try: #返回none时跳过for key in list(secondDict.keys()):if testVec[featIndex] == key:if type(secondDict[key]).__name__=='dict':classLabel = classify(secondDict[key],featLabels,testVec)else:classLabel = secondDict[key]return classLabelexcept:pass
测试课本数据
train = [['1', '1', 'yes'], #例如这个样本点代表不能浮出水面、有脚蹼,是鱼类['1', '1', 'yes'],['1', '0', 'no'],['0', '1', 'no'],['0', '1', 'no']]
labels = ['no surfacing','flippers']
labels1 = labels[:]
myTree = createTree(train,labels)
print(classify(myTree,labels1,['1','1']))
运行结果:
使用Matplotlib注解绘制树形图
显然字典的表示形式非常不易理解,不够直观。
import matplotlib.pyplot as plt decisionNode = dict(boxstyle=“sawtooth”, fc=“0.8”)
leafNode = dict(boxstyle=“round4”, fc=“0.8”)
arrow_args = dict(arrowstyle=“<-“) def getNumLeafs(myTree): numLeafs = 0 #firstStr = myTree.keys()[0] firstSides = list(myTree.keys()) firstStr = firstSides[0]#找到输入的第一个元素 secondDict = myTree[firstStr] for key in secondDict.keys(): if type(secondDict[key]).__name__==’dict’:#test to see if the nodes are dictonaires, if not they are leaf nodes numLeafs += getNumLeafs(secondDict[key]) else: numLeafs +=1 return numLeafs def getTreeDepth(myTree): maxDepth = 1 firstSides = list(myTree.keys()) firstStr = firstSides[0]#找到输入的第一个元素 #firstStr = myTree.keys()[0] #注意这里和机器学习实战中代码不同,这里使用的是Python3,而在Python2中可以写成这种形式 secondDict = myTree[firstStr] for key in secondDict.keys(): if type(secondDict[key]) == dict: thisDepth = 1 + getTreeDepth(secondDict[key]) else: thisDepth = 1 if thisDepth > maxDepth: maxDepth = thisDepth return maxDepth def plotNode(nodeTxt, centerPt, parentPt, nodeType): createPlot.ax1.annotate(nodeTxt, xy=parentPt, xycoords=‘axes fraction’, xytext=centerPt, textcoords=‘axes fraction’, va=“center”, ha=“center”, bbox=nodeType, arrowprops=arrow_args ) def plotMidText(cntrPt, parentPt, txtString): xMid = (parentPt[0]-cntrPt[0])/2.0 + cntrPt[0] yMid = (parentPt[1]-cntrPt[1])/2.0 + cntrPt[1] createPlot.ax1.text(xMid, yMid, txtString, va=“center”, ha=“center”, rotation=30) def plotTree(myTree, parentPt, nodeTxt): numLeafs = getNumLeafs(myTree) depth = getTreeDepth(myTree) firstSides = list(myTree.keys()) firstStr = firstSides[0]#找到输入的第一个元素 cntrPt = (plotTree.xOff + (1.0 + float(numLeafs))/2.0/plotTree.totalW, plotTree.yOff) plotMidText(cntrPt, parentPt, nodeTxt) plotNode(firstStr, cntrPt, parentPt, decisionNode) secondDict = myTree[firstStr] plotTree.yOff = plotTree.yOff - 1.0/plotTree.totalD for key in secondDict.keys(): if type(secondDict[key]).__name__==’dict’: plotTree(secondDict[key],cntrPt,str(key)) else: plotTree.xOff = plotTree.xOff + 1.0/plotTree.totalW plotNode(secondDict[key], (plotTree.xOff, plotTree.yOff), cntrPt, leafNode) plotMidText((plotTree.xOff, plotTree.yOff), cntrPt, str(key)) plotTree.yOff = plotTree.yOff + 1.0/plotTree.totalD
def createPlot(inTree): fig = plt.figure(1, facecolor=‘white’) fig.clf() axprops = dict(xticks=[], yticks=[]) createPlot.ax1 = plt.subplot(111, frameon=False, **axprops) #no ticks #createPlot.ax1 = plt.subplot(111, frameon=False) #ticks for demo puropses plotTree.totalW = float(getNumLeafs(inTree)) plotTree.totalD = float(getTreeDepth(inTree)) plotTree.xOff = -0.5/plotTree.totalW; plotTree.yOff = 1.0; plotTree(inTree, (0.5,1.0), ”) plt.show()
测试
createPlot({'no surfacing': {0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}})
运行结果
(4)使用自己的数据集
训练集和测试集的创建
#创建训练集
def createTrainSet():f = open('train.txt','r')trainSet = []for i in f.readlines():lst = i.strip('\n').split(',')trainSet.append(lst)#可写成dataSet = [i.strip('\n').split(',') for i in f.readlines()]labels = ['buying','maint','doors','persons','lug_boot','safety']#label记录样本的特征名称return trainSet, labels#创建测试集
def createTestSet():f = open('test.txt','r')testSet = []for i in f.readlines():lst = i.strip('\n').split(',')l = lst[:6]testSet.append(l)#可写成dataSet = [i.strip('\n').split(',') for i in f.readlines()]labels = ['buying','maint','doors','persons','lug_boot','safety']#label记录样本的特征名称return testSet, labels
数据集是通过UCI数据集下载的(http://archive.ics.uci.edu/ml/index.php),Car Evaluation数据集,其中信息为:
Attribute Information:
Class Values:
unacc, acc, good, vgood
Attributes:
buying: vhigh, high, med, low.
maint: vhigh, high, med, low.
doors: 2, 3, 4, 5more.
persons: 2, 4, more.
lug_boot: small, med, big.
safety: low, med, high.
分类测试
train,labels = createTrainSet()
labels = ['buying','maint','doors','persons','lug_boot','safety']
labels1 = labels[:]
myTree = createTree(train,labels)
test,labels = createTestSet()
# print(classify(myTree,labels1,['med', 'low', '2','4','small','high']))
for i in test:print(classify(myTree,labels1,i))
运行结果
这是所生成的决策树,通过字典表达,训练集有1208条,所以字典延伸到很后面。
决策树可视化,数据较多,所以树重叠在一起了。
测试集通过训练集得到的决策树模型获得分类结果。
训练集和测试集创建
#创建训练集
def createTrainSet():f = open('dataSet.txt','r')trainSet = []j = 0for i in f.readlines():lst = i.strip('\n').split(',')if j % 2 == 0:trainSet.append(lst)j+=1# print(trainSet)#可写成dataSet = [i.strip('\n').split(',') for i in f.readlines()]labels = ['buying','maint','doors','persons','lug_boot','safety']#label记录样本的特征名称return trainSet, labels#创建测试集
def createTestSet():f = open('dataSet.txt','r')testSet = []testend = []k = 0for i in f.readlines():lst = i.strip('\n').split(',')l = lst[:6]if k % 2 == 1:testSet.append(l)testend.append(lst)k+=1#可写成dataSet = [i.strip('\n').split(',') for i in f.readlines()]labels = ['buying','maint','doors','persons','lug_boot','safety']#label记录样本的特征名称return testSet, labels,testend
主函数
if __name__ == '__main__':train,labels = createTrainSet()labels = ['buying','maint','doors','persons','lug_boot','safety']labels1 = labels[:]myTree = createTree(train,labels)# print(myTree)# treePlotter.createPlot(myTree)test,labels,testend = createTestSet()# print(classify(myTree,labels1,['med', 'low', '2','4','small','high']))print(testend)print(test)allnum = len(testend)right = 0count = 0for i in test:# print(i)# print(testend[count])result = classify(myTree,labels,i)print(result)if result == testend[count][6]:right+=1count+=1print("正确率为",right/allnum*100,'%')
运行结果
模型对于该测试集正确率为90%左右。
2. C4.5
(1)定义
鉴于ID3算法的不足即偏向选择取值较多的属性,所以C4.5则是改用信息增益率对属性进行划分。信息增益率对可取值数目较少的属性有所偏好。
(2)公式
定义信息增益率为:Gainratio(D,a)=Gain(D,a)IV(a)Gainratio(D,a)=\frac{Gain(D,a)}{IV(a)}Gainratio(D,a)=IV(a)Gain(D,a),
其中 IV(a)=−∑v=1V∣Dv∣∣D∣log2∣Dv∣∣D∣IV(a) = -\sum_{v=1}^{V}\frac{\left | D^{v} \right |}{\left | D \right |}log_{2}\frac{\left | D^{v} \right |}{\left | D \right |}IV(a)=−∑v=1V∣D∣∣Dv∣log2∣D∣∣Dv∣ ,称为属性a的“固有值” ,属性a的可能取值数目越多(即V越大),则IV(a)的值通常就越大。
采用了一个启发式方法:先从候选划分属性中找出信 息增益高于平均水平的属性,再从中选取增益率最高的。
(3)代码
相比于ID3变动不大,就在 chooseBestFeatureToSplit() 函数处改动即可,根据公式做出相应的变化,,代码如下:
#选择最好的数据集划分方式
def chooseBestFeatureToSplit(dataSet):numFeatures = len(dataSet[0]) - 1 #特征数量,numfeature为特征的维度,因为最后一列为标签,所以需要减去1baseEntropy = calcShannonEnt(dataSet) #用来记录最小信息熵,初始值为原始数据集对应的信息熵bestinfoGainratio = 0.0 #信息增益率初始化为0,bestFeature = -1 #最优的划分特征初始化为-1for i in range(numFeatures): #遍历所有的特征featList = [example[i] for example in dataSet] #创建list用来存每个样本在第i维度的特征值uniqueVals = set(featList) #获取该特征下的所有不同的值,即根据该特征可以划分为几类,可以去除重复值newEntropy = 0.0 #初始化熵为0IV = 0.0for value in uniqueVals: #遍历该特征维度下对应的所有特征值subDataSet = splitDataSet(dataSet, i, value) #依据这个值,将样本划分为几个子集,有几个value,就有几个子集prob = len(subDataSet)/float(len(dataSet)) #计算p值newEntropy += prob * calcShannonEnt(subDataSet) #计算每个子集对应的信息熵,并全部相加,得到划分后数据的信息熵IV -= prob * log(prob,2)infoGain = baseEntropy - newEntropy #将原数据的信息熵-划分后数据的信息熵,得到信息增益if IV == 0.0: #除以0处理infoGainratio = 0.0else:infoGainratio = float(infoGain) / float(IV) if (infoGainratio > bestinfoGainratio): #如果这个信息增益率比当前记录的最佳信息增益率还大,就将该增益和划分依据的特征记录下来bestinfoGainratio = infoGainratio #更新信息增益率,找到最大的信息增益率bestFeature = i #记录信息增益率最大的索引值return bestFeature #returns an integer
数据集测试结果:正确率在89%左右
3. CART
(1)概念
分类问题中,假设D有K个类,样本点属于第k类的概率为 pkp_kpk , 则概率分布的基尼值定义为:
Gini(D)=∑k=1Kpk(1−pk)=1−∑k=1Kpk2Gini(D)=\sum_{k=1}^{K}p_k(1-p_k)=1-\sum_{k=1}^{K}p_{k}^{2}Gini(D)=∑k=1Kpk(1−pk)=1−∑k=1Kpk2,
反映了随机抽取两个样本,其类别标记不一致的概率。Gini(D)值越小,数据集D的纯度越高。
- 基尼值越小,纯度越高,集合的有序程度越高,分类的效果越好;
- 基尼指数为 0 时,表示集合类别一致;
给定数据集D,属性a的基尼指数定义为:
Giniindex(D,a)=∑v=1V∣Dv∣∣D∣Gini(Dv)Gini_{index}(D,a)=\sum_{v=1}^{V}\frac{\left | D^{v} \right |}{\left | D \right |}Gini(D^v)Giniindex(D,a)=∑v=1V∣D∣∣Dv∣Gini(Dv)
在候选属性集合A中,选择那个使得划分后基尼指数最小的属性作为最有划分属性。
(2)代码实现
不再需要香农熵,改用基尼指数来划分属性
def calcProbabilityEnt(dataSet):numEntries = len(dataSet) #数据条数feaCounts = 0fea1 = dataSet[0][len(dataSet[0])-1]for feaVec in dataSet:if feaVec[-1] == fea1:feaCounts += 1probabilityEnt = float(feaCounts) / numEntriesreturn probabilityEnt#选择最好的数据集划分方式
def chooseBestFeatureToSplit(dataSet):numFeatures = len(dataSet[0]) - 1 #特征数量,numfeature为特征的维度,因为最后一列为标签,所以需要减去1if numFeatures == 1: #当只有一个特征时return 0bestGini = 1 #最佳基尼指数bestFeature = -1 #最优的划分特征初始化为-1for i in range(numFeatures): #遍历所有的特征featList = [example[i] for example in dataSet] #创建list用来存每个样本在第i维度的特征值feaGini = 0 #定义特征的值的基尼系数uniqueVals = set(featList) #获取该特征下的所有不同的值,即根据该特征可以划分为几类,可以去除重复值for value in uniqueVals: #遍历该特征维度下对应的所有特征值subDataSet = splitDataSet(dataSet, i, value) #依据这个值,将样本划分为几个子集,有几个value,就有几个子集prob = len(subDataSet)/float(len(dataSet)) #计算p值probabilityEnt = calcProbabilityEnt(subDataSet)feaGini += prob * (2 * probabilityEnt * (1 - probabilityEnt))if (feaGini < bestGini):bestGini = feaGinibestFeature = i #记录基尼指数最小的索引值return bestFeature #returns an integer
(3)运行结果
数据集测试结果 :正确率在70%左右。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 借助FileProvider发送彩信
通过系统相册固然可以获得照片的路径对象,却无法知晓更多的详细信息,例如图片名称、文件大小、文件路径等等都不知道,也就无法进行个性化的定制开发。为了把更多的文件信息开放出来,Android设计了专门的媒体共享库,允许…...
2024/4/29 6:05:29 - 基于HTML(蔬菜水果超市)电商项目项目的设计与实现.rar(html前端源码)毕业设计.rar
采用divcssjquery技术开发,主要设计功能首页、商品列表、商品详细页、订单页、购物页、结算页面等相关页面设计。 源码下载地址:请点击》》》》...
2024/5/6 21:27:58 - 《Red5 用户参考手册》之四:入门第三章 迁移指南
官方最新《Red5 用户参考手册》全套下载地址本文档介绍了 Macromedia Flash 通信服务器/Adobe Flash 媒体服务器和 Red5 之间的 API 差异,目的是帮助我们将现有的应用转移至 Red5。如果你还没有基于 Red5 的应用,请先阅读有关创建一个新的 Red5 应用程序的文档。程序回调当实…...
2024/4/25 15:40:16 - 中间件(八):RocketMQ代码解读3
9、NameServer是如何处理Broker的注册请求的?...
2024/5/3 6:02:38 - AI-机器学习-自学笔记(三)逻辑回归算法
逻辑回归(Logistic)是二分类任务的首选方法。它输出一个 0 到 1 之间的离散二值结果。简单来说,它的结果不是 1 就是 0。所以逻辑回归解决的是分类问题,不是回归问题。它就是通过拟合 一个逻辑函数 (Logit Function &a…...
2024/4/21 17:02:22 - Linux使用ffmpeg和tree命令遍历获取子目录下的视频时长
一、安装ffmpeg和tree sudo apt update #更新软件列表 sudo apt upgrade #更新系统内软件 sudo apt install ffmpeg -y #安装ffmpeg sudo apt install tree -y #安装tree二、利用ffprobe获取单个视频时长 ffprobe -v error -show_entries formatduration -of defaultnoprint_…...
2024/4/21 17:02:21 - 漆学军:MACD交叉,金叉做多,死叉做空的例子程序
《MT4EA编程速成教程》中第33页习题: 第二题:将交易信号改成MACD交叉,金叉做多,死叉做空。 这道题的重点和难点就是获取MACD的指标值,MACD和之前的抛物线指标或者均线指标不一样,稍微复杂些。 MACD指标有…...
2024/5/2 23:16:02 - keepalived 框架
keepalived 是一个用 C 语言写的一个路由软件,这个项目的主要目标是能为 Linux 系统和基于 Linux 的基础设施平台提供在负载均衡与高可用上稳定,简单的软件。 keepalived 负载均衡的框架是依赖于著名的并且被广泛使用的 Linux Virtual Server࿰…...
2024/4/26 12:19:15 - 9、NameServer是如何处理Broker的注册请求的?
9、NameServer是如何处理Broker的注册请求的?...
2024/5/9 6:07:57 - DS二叉树--基于数组存储的构建
二叉树性质 设某节点编号为pos,则其左右孩子的pos1,2pos2; 运用递归建树的话还是先建立左孩子;将2*pos1,传进去 进去左孩子的建立之后也是先建立左孩子,对于上一次来说,此时参数是是2(2pos1&…...
2024/5/2 11:10:31 - JVM双亲委派机制
添加链接描述...
2024/5/5 3:45:29 - transition动画过渡没作用(无效)
transition无效的原因 1、只给该元素赋予了过渡属性的结束值,并未在过渡前定义初始值。 css .header {position: relative;width: 200px;height: 50px;background: red;transition: all 0.3s ease-in-out; } .showMenu.layui-layout-admin .header{ left:-200px…...
2024/4/20 1:44:52 - mybatis pusl实现自定义的,高级从查询和分页
在 controller层 RestController RequestMapping("/tenant") public class TenantController {Autowiredpublic ITenantService tenantService;/*** 分页查询数据** param query 查询对象* return PageList 分页对象*/PostMapping("/list")public PageLis…...
2024/4/29 10:31:36 - jane street information session on pythonandocaml
...
2024/5/6 1:06:13 - 文献阅读《λ-Domain Optimal Bit Allocation Algorithm for High Efficiency Video Coding》
文章目录1. 码率控制算法分为两个步骤2. λ-domain R-D 分析综合框架(1) R-λ 模型(2) D-λ 模型3. GOP 级比特分配算法4. 图片级比特分配算法(1) 固定权重比特分配(2) 基于视频内容的自适应比特分配算法5. BU 级比特分配算法(1) 基于 MAD 的 BU 级比特分配算法(2) 基于视频内容…...
2024/4/27 3:46:07 - Java中高级核心知识全面解析——HTTPS中的TLS(TLS-工作流程
三、从密码学的角度理解 HTTPS HTTPS 使用 TLS 保证安全,这里的“安全”分两部分,一是传输内容加密、二是服务端的身份认证 1.TLS 工作流程 此为服务端单向认证,还有客户端/服务端双向认证,流程类似,只不过客户端也…...
2024/5/1 2:32:28 - Win7操作系统
Win7操作系统 一、操作系统的概述 1.1操作系统的概念 操作系统(operating system,简称OS)一组控制和管理计算机系统的硬件和软件资源、控制程序执行、改善人机界面、合理地组织计算机工作流程并为用户使用计算机提供良好运行环境的一种系统…...
2024/5/8 3:02:17 - 指针的进阶
目录 1.字符指针 2.指针数组 3.数组指针 4.函数指针 5.函数指针数组 6.指向函数指针数组的指针 1.字符指针 #include<stdio.h> int main() {char ch[] "abcdef";char* pc &ch;printf("%s\n", ch);printf("%s\n", pc);} 答案&…...
2024/5/8 17:43:56 - 当vue遇上Hybrid APP
Hybrid APP 优势 网上查了一圈,没有找到符合我内心的描述,所以就算忽略吧,反正优点很多,这不是我们要说的重点,忽略几百字或者几十字总有的 解决方案--jsbridge Hybrid网上很多,比较大型的方案还是推荐j…...
2024/5/6 7:02:46 - HTML5+CSS3基础学习笔记(三)
HTML5CSS3基础学习笔记(三)一、Emmet语法1.快速生成HTML结构语法2.快速生成CSS样式语法3.格式化代码二、CSS的复合选择器1.后代选择器2.子选择器3.并集选择器4.伪类选择器三、CSS的元素显示模式1.什么是元素显示模式2.元素显示模式的分类3.元素显示模式的…...
2024/5/5 3:56:18
最新文章
- 视频监控平台:交通运输标准JTT808设备SDK接入源代码函数分享
目录 一、JT/T 808标准简介 (一)概述 (二)协议特点 1、通信方式 2、鉴权机制 3、消息分类 (三)协议主要内容 1、位置信息 2、报警信息 3、车辆控制 4、数据转发 二、代码和解释 (一…...
2024/5/10 4:25:56 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/9 21:23:04 - docker进行jenkins接口自动化测试持续集成实战
文章目录 一、接口功能自动化测试项目源码讲解二、接口功能自动化测试运行环境配置1、下载jdk,maven,git,allure并配置对应的环境变量2、使用docker安装jenkins3、配置接口测试的运行时环境选择对应节点4、jenkins下载插件5、jenkins配置环境…...
2024/5/9 19:27:28 - Spring集成MyBatis
基本准备 创建Dynamic Web Project 引入相关jar包 Spring框架相关jar包 MyBatis连接Spring相关jar包 连接MySQL驱动包 JSTL标签库包 添加db.properties文件,该属性文件配置连接数据库相关信息 drivercom.mysql.jdbc.Driver urljdbc:mysql://localhost:3306/myba…...
2024/5/8 17:52:45 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/8 6:01:22 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/9 15:10:32 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/9 4:20:59 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/7 11:36:39 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/8 20:48:49 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/7 9:26:26 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/8 19:33:07 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/8 20:38:49 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/9 7:32:17 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/9 17:11:10 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57