如果您同时存在相关且依赖于相同输入数据的分类和回归问题,是否有可能成功构建一个既提供分类输出又提供回归输出的神经网络?
如果是这样,损失函数如何构建?
我创建了一个用于序列分类(二进制)的LSTM网络,其中每个样本具有25个时间步长和4个特征.以下是我的keras网络拓扑:
在上面,Dense层之后的激活层使用softmax函数.我使用binary_crossentropy作为损失函数,使用Adam作为编译keras模型的优化器.使用batch_size = 256,shuffle = True和validation_split = 0.05训练模型,以下是训练日志:
Train on 618196 samples, validate on 32537 samples
2017-09-15 01:23:34.407434: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:893] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2017-09-15 01:23:34.407719: I tensorflow/core/common_runtime/gpu/gpu_device.cc:955] Found device 0 with properties:
name: GeForce GTX 1050
major: 6 minor: 1 memoryClockRate (GHz) 1.493
pciBusID 0000:01:00.0
Total memory: 3.95GiB
Free memory: 3.47GiB
2017-09-15 01:23:34.407735: I tensorflow/core/common_runtime/gpu/gpu_device.cc:976] DMA: 0
2017-09-15 01:23:34.407757: …Run Code Online (Sandbox Code Playgroud) PyTorch 的负对数似然损失nn.NLLLoss定义为:
因此,如果使用单批次中一个的标准重量来计算损失,则损失的公式始终为:
\n\n\n-1 *(正确类别的模型预测)
\n
例子:
\n\n正确类别 = 0
\n正确类别的模型预测 = 0.5
\n损失 = -1 * 0.5
\n那么,如果计算损失时没有涉及对数函数,为什么它被称为“负对数似然损失”呢?\n\xe2\x80\x8b
\n二值化是将实体的彩色特征转换为数字向量(通常是二进制向量)的行为,以便为分类器算法提供良好的示例.
如果我们将句子"猫吃狗"二进制化,我们可以先为每个单词分配一个ID(例如cat-1,ate-2,the-3,dog-4),然后简单地将单词替换为它的ID给出了矢量<3,1,2,3,4>.
给定这些ID,我们还可以通过给每个字四个可能的槽创建二进制向量,并将对应于特定单词的槽设置为1,给出向量<0,0,1,0,1,0,0,0 ,0,1,0,0,0,0,0,1>.据我所知,后一种方法通常被称为词袋方法.
现在,对于我的问题,一般来说,描述自然语言处理的特征,特别是基于转换的依赖解析(使用Nivres算法)时,最好的二值化方法是什么?
在这种情况下,我们不希望编码整个句子,而是编码解析的当前状态,例如堆栈中的顶部单词和输入队列中的第一个单词.由于订单具有高度相关性,因此排除了词袋方法.
有了最好的,我指的是,使数据的最可理解的分类方法,而无需使用了不必要的内存.例如,如果只有2%的双子星实际存在,我不想要一个单词bigram使用4亿个特征来获得20000个独特单词.
由于答案也取决于特定的分类器,我最感兴趣的是最大熵模型(liblinear),支持向量机(libsvm)和感知器,但是也欢迎适用于其他模型的答案.
快速谷歌搜索显示,有很多贝叶斯分类器被实现为Python模块.如果我想要包装,类似于dbacl的高级功能,哪些模块适合我?
训练
% dbacl -l one sample1.txt
% dbacl -l two sample2.txt
Run Code Online (Sandbox Code Playgroud)
分类
% dbacl -c one -c two sample3.txt -v
one
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的java代码中使用weka API.我使用J48树分类来分类MySQL数据库中的数据集,但是我有这个错误:
Trying to add database driver (JDBC): RmiJdbc.RJDriver - Error, not in CLASSPATH?
Trying to add database driver (JDBC): jdbc.idbDriver - Error, not in CLASSPATH?
Trying to add database driver (JDBC): com.mckoi.JDBCDriver - Error, not in CLASSPATH?
Trying to add database driver (JDBC): org.hsqldb.jdbcDriver - Error, not in CLASSPATH?
weka.core.UnassignedClassException: weka.classifiers.trees.j48.C45PruneableClassifierTree: Class attribute not set!
at weka.core.Capabilities.test(Capabilities.java:1086)
at weka.core.Capabilities.test(Capabilities.java:1018)
at weka.core.Capabilities.testWithFail(Capabilities.java:1297)
.....
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
try{
DatabaseLoader loader = new DatabaseLoader();
loader.setSource("jdbc:mysql://localhost:3306/cuaca","root","491754");
loader.setQuery("select * from data_training");
Instances data = loader.getDataSet();
jTextArea1.append(data.toString()); …Run Code Online (Sandbox Code Playgroud) 我有大约10,000个文本文档.
如何将它们表示为特征向量,以便我可以将它们用于文本分类?
有没有自动执行特征向量表示的工具?
我是weka的新手,我对这个工具感到困惑.我需要做的是我有一个关于水果价格和相关属性的数据集,我试图使用数据集预测特定的水果价格.由于我是weka的新手,我无法弄清楚如何完成这项任务.请帮助我或指导我一个关于如何进行预测的教程,以及执行此任务的最佳方法或算法.
谢谢.
我正在尝试理解和绘制不同类型分类器的TPR/FPR.我在R中使用kNN,NaiveBayes和Decision Trees.对于kNN,我正在做以下事情:
clnum <- as.vector(diabetes.trainingLabels[,1], mode = "numeric")
dpknn <- knn(train = diabetes.training, test = diabetes.testing, cl = clnum, k=11, prob = TRUE)
prob <- attr(dpknn, "prob")
tstnum <- as.vector(diabetes.testingLabels[,1], mode = "numeric")
pred_knn <- prediction(prob, tstnum)
pred_knn <- performance(pred_knn, "tpr", "fpr")
plot(pred_knn, avg= "threshold", colorize=TRUE, lwd=3, main="ROC curve for Knn=11")
Run Code Online (Sandbox Code Playgroud)
其中diabetes.trainingLabels [,1]是我要预测的标签(类)的载体,diabetes.training是训练数据,diabetest.testing是testing.data.
存储在prob属性中的值是一个数字向量(0到1之间的小数).我将类标签因子转换为数字,然后我可以将它与ROCR库中的谓词/性能函数一起使用.不是100%肯定我做得对,但至少它是有效的.
对于NaiveBayes和Decision Trees tho,在预测函数中使用prob/raw参数我没有得到单个数字向量,而是列表或矩阵的向量,其中指定了每个类的概率(我猜),例如:
diabetes.model <- naiveBayes(class ~ ., data = diabetesTrainset)
diabetes.predicted <- predict(diabetes.model, diabetesTestset, type="raw")
Run Code Online (Sandbox Code Playgroud)
和糖尿病.预测是:
tested_negative tested_positive
[1,] 5.787252e-03 0.9942127
[2,] 8.433584e-01 0.1566416 …Run Code Online (Sandbox Code Playgroud) 这是一个简单的例子classification_report中sklearn
from sklearn.metrics import classification_report
y_true = [0, 1, 2, 2, 2]
y_pred = [0, 0, 2, 2, 1]
target_names = ['class 0', 'class 1', 'class 2']
print(classification_report(y_true, y_pred, target_names=target_names))
# precision recall f1-score support
#
# class 0 0.50 1.00 0.67 1
# class 1 0.00 0.00 0.00 1
# class 2 1.00 0.67 0.80 3
#
#avg / total 0.70 0.60 0.61 5
Run Code Online (Sandbox Code Playgroud)
我希望能够访问平均/总行数.例如,我想从报告中提取f1-score,即0.61.
我怎样才能访问该号码classification_report?
classification ×10
python ×2
text ×2
weka ×2
api ×1
bayesian ×1
data-mining ×1
dataset ×1
java ×1
keras ×1
libsvm ×1
nlp ×1
prediction ×1
pytorch ×1
r ×1
regression ×1
roc ×1
scikit-learn ×1