pytorch CrossEntropyLoss(), Softmax(), logSoftmax, NLLLosssoftmax(input, target)前面分析过其中的dim,就不多说,给出的结果是一个样本在C个类别上的概率分别是多少,概率之和为1.
logSoftmax(input, target)就是先softmax,然后将结果log一下 , softmax的数值∈[0,1] , log以后就是负无穷到0之间,这样做的好处解决softmax可能 带来的上溢出和下溢出问题,加快运算速度,提高数据稳定性。
NLLLoss(input, target)是按照target数值(一个代表一行)将input中每行对应位置的数据取出来,去掉负号,求和,再取平均 。
logSoftmax + NLLLoss就是计算交叉熵
CrossEntropyLoss(input, target) = logSoftmax +NLLLoss = log(Softmax) + NLLLoss
因此,在分类问题中 , 要使用CrossEntropyLoss函数计算交叉熵损失,在model中最后一层就不需要添加Softmax层了 。
通过实际测试确定,CrossEntropyLoss中内置的LogSoftmax默认是按照行加和为1.
参考:
;depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
python对数据进行聚类怎么显示数据分类将其整理成数据集为:
[ [1,0,"yes"],[1,1,"yes"],[0,1,"yes"],[0,0,"no"],[1,0,"no"] ]
算法过程:
1、计算原始的信息熵 。
2、依次计算数据集中每个样本的每个特征的信息熵 。
3、比较不同特征信息熵的大?。〕鲂畔㈧刈畲蟮奶卣髦挡⑹涑?。
运行结果:
col : 0 curInfoGain : 2.37744375108 baseInfoGain : 0.0
col : 1 curInfoGain : 1.37744375108 baseInfoGain : 2.37744375108
bestInfoGain : 2.37744375108 bestFeature: 0
结果分析:
说明按照第一列,即有无喉结这个特征来进行分类的效果更好 。
思考:
1、能否利用决策树算法,将样本最终的分类结果进行输出?如样本1,2,3属于男性,4属于女性 。
2、示例程序生成的决策树只有一层,当特征量增多的时候,如何生成具有多层结构的决策树?
3、如何评判分类结果的好坏?
在下一篇文章中,我将主要对以上三个问题进行分析和解答 。如果您也感兴趣,欢迎您订阅我的文章,也可以在下方进行评论,如果有疑问或认为不对的地方 , 您也可以留言 , 我将积极与您进行解答 。
完整代码如下:
from math import log
"""
计算信息熵
"""
def calcEntropy(dataset):
diclabel = {} ## 标签字典,用于记录每个分类标签出现的次数
for record in dataset:
label = record[-1]
if label not in diclabel.keys():
diclabel[label] = 0
diclabel[label] += 1
### 计算熵
entropy = 0.0
cnt = len(dataset)
for label in diclabel.keys():
prob = float(1.0 * diclabel[label]/cnt)
entropy -= prob * log(prob,2)
return entropy
def initDataSet():
dataset = [[1,0,"yes"],[1,1,"yes"],[0,1,"yes"],[0,0,"no"],[1,0,"no"]]
label = ["male","female"]
return dataset,label
#### 拆分dataset ,根据指定的过滤选项值,去掉指定的列形成一个新的数据集
def splitDataset(dataset , col, value):
retset = [] ## 拆分后的数据集
for record in dataset:
if record[col] == value :
reducedFeatVec = record[:col]
reducedFeatVec.extend(record[col+1:]) ### 将指定的列剔除
retset.append(reducedFeatVec) ### 将新形成的特征值列表追加到返回的列表中
return retset
### 找出信息熵增益最大的特征值
### 参数:
### dataset : 原始的数据集
def findBestFeature(dataset):
numFeatures = len(dataset[0]) - 1 ### 特征值的个数
baseEntropy = calcEntropy(dataset) ### 计算原始数据集的熵
baseInfoGain = 0.0 ### 初始信息增益
推荐阅读
- 拍摄相机用什么模式比较好,拍摄相机用什么模式比较好呢
- 直播为什么唱歌不露脸,抖音怎么直播唱歌不露脸
- linux时间搓命令,linux时间戳命令
- 直播常见带货产品类型,网络直播带货类型
- go语言revel go语言培训
- 电脑开机修复后花屏怎么办,电脑开机修复黑屏怎么办
- 拍摄视频拍什么样的比较好,拍视频应该拍什么
- ChatGPT帐号注册,chainchat注册有风险吗
- 数据上传批处理php php文件批量上传