标签: classification

计算多个分类器的分数

我正在尝试确定大型集合中的成对项目之间的相似性。这些项目有多个属性,我能够计算每个属性的离散相似度分数(介于 0 和 1 之间)。我根据属性使用各种分类器:TF-IDF 余弦相似度、朴素贝叶斯分类器等。

当我将所有这些信息编译成所有项目的最终相似度分数时,我陷入了困境。我不能只取未加权的平均值,因为 1)什么是高分取决于分类器,2)某些分类器比其他分类器更重要。另外,一些分类器应该只考虑它们的高分,即高分表示较高的相似度,但较低的分没有意义。

到目前为止,我已经通过猜测计算了最终分数,但分类器数量的增加使得这是一个非常糟糕的解决方案。有什么技术可以确定一个最佳公式,该公式将采用我的各种分数并仅返回一个分数?值得注意的是,系统确实会收到人类反馈,这就是一些分类器的工作原理。

最终我只对每个项目最相似的排名感兴趣。绝对分数本身是没有意义的,只有它们的顺序很重要。

classification machine-learning

3
推荐指数
1
解决办法
857
查看次数

sklearn GridSearchCV:如何获取分类报告?

我像这样使用 GridSearchCV:

corpus = load_files('corpus')

with open('stopwords.txt', 'r') as f:
    stop_words = [y for x in f.read().split('\n') for y in (x, x.title())]

x = corpus.data

y = corpus.target

pipeline = Pipeline([
    ('vec', CountVectorizer(stop_words=stop_words)),
    ('classifier', MultinomialNB())])

parameters = {'vec__ngram_range': [(1, 1), (1, 2)],
              'classifier__alpha': [1e-2, 1e-3],
              'classifier__fit_prior': [True, False]}

gs_clf = GridSearchCV(pipeline, parameters, n_jobs=-1, cv=5, scoring="f1", verbose=10)

gs_clf = gs_clf.fit(x, y)

joblib.dump(gs_clf.best_estimator_, 'MultinomialNB.pkl', compress=1)
Run Code Online (Sandbox Code Playgroud)

然后,在另一个文件中,为了对新文档(不是来自语料库的文档)进行分类,我这样做:

  classifier = joblib.load(filepath) # path to .pkl file
  result = classifier.predict(tokenlist)
Run Code Online (Sandbox Code Playgroud)

我的问题是:我在哪里可以获得 所需的值classification_report

在许多其他示例中,我看到人们将语料库分为训练集和测试集。但是,由于我使用的 …

classification scikit-learn grid-search

3
推荐指数
1
解决办法
5150
查看次数

Scikit 使用 CaliberatedClassifierCV 校准分类器的正确方法

Scikit 有CalibrateClassifierCV,它允许我们在特定的 X、y 对上校准我们的模型。它还明确指出data for fitting the classifier and for calibrating it must be disjoint.

如果它们必须是不相交的,那么用以下方法训练分类器是否合法?

model = CalibratedClassifierCV(my_classifier)
model.fit(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)

我担心使用相同的训练集会违反规则disjoint data。另一种选择可能是有一个验证集

my_classifier.fit(X_train, y_train)
model = CalibratedClassifierCV(my_classifier, cv='prefit')
model.fit(X_valid, y_valid)
Run Code Online (Sandbox Code Playgroud)

其缺点是留下的训练数据较少。另外,如果CalibrateClassifierCV应该只适合适合不同训练集的模型,为什么它的默认选项是cv=3,它也适合基本估计器?交叉验证是否自行处理不相交规则?

问题:CalibrateClassifierCV 的正确使用方法是什么?

python classification calibration training-data scikit-learn

3
推荐指数
1
解决办法
3128
查看次数

如何生成阳性预测值 (PPV) 与各种分类截止点的关系图?

我生成了一些分数来帮助预测某些内容是“是”(1) 还是“否”(0),假设数据包括:

scores = c(10:20)

response = c(0,0,1,0,1,0,1,1,0,1,1)

mydata = data.frame(scores, response)
Run Code Online (Sandbox Code Playgroud)

我可以进行 ROC 分析,得出 AUC 为 0.77:

roc(response = mydata$response, predictor = mydata$scores) 
Run Code Online (Sandbox Code Playgroud)

现在,我如何准确地看到选择不同的截止值时会发生什么?我想在 x 轴上设置截止值(比方说 13,14,15,16,17),在 y 轴上设置 PPV。有什么好的方法可以做到这一点?我需要什么功能/包?

r classification roc

3
推荐指数
1
解决办法
1626
查看次数

在数据子集上运行时出现 h2o 错误,但在原始数据上运行完美

我得到的错误是这样的。我的数据的子集 [~100k 示例] 与原始数据集 [400k 示例] 具有完全相同的列数。但它在原始数据集上运行完美,但在子集上运行不佳。

Traceback (most recent call last)
<ipython-input-14-35cf02055a2e> in <module>()
     15 from h2o.estimators.gbm import H2OGradientBoostingEstimator
     16 gbm_cv3 = H2OGradientBoostingEstimator(nfolds=2)
---> 17 gbm_cv3.train(x=x, y=y, training_frame=train)
     18 ## Getting all cross validated models
     19 all_models = gbm_cv3.cross_validation_models()



error_count = 2
    http_status = 412
    msg = u'Illegal argument(s) for GBM model: 
GBM_model_python_1533214798867_179.  Details: ERRR on field: 
_response: Response cannot be constant.'
    dev_msg = u'Illegal argument(s) for GBM model: 
GBM_model_python_1533214798867_179.  Details: ERRR on field: 
_response: Response cannot be constant.'
Run Code Online (Sandbox Code Playgroud)

python classification gbm h2o xgboost

3
推荐指数
1
解决办法
1561
查看次数

合并相同的 vgg16 模型但具有不同的输入

我正在研究一个项目中的分类问题。我的问题的特殊性是我必须使用两种不同类型的数据来管理它。我的课程包括汽车、行人、卡车和自行车。我的数据集由以下部分组成:

-来自相机的图像:它们是 RGB 图像。这是一个例子:在此输入图像描述

  • 通过将激光雷达点云(仅 3D 点)投影到 2D 相机平面并使用深度和反射率对像素进行编码来获得图像。以下是示例: 在此输入图像描述 在此输入图像描述

我已经成功地使用这两种模式,以便通过使用 keras API 的 Concatenate 函数来执行分类任务。

但我想做的是使用像 VGG 这样更强大的 CNN。我使用预训练模型并冻结除最后 4 层之外的所有层。我将灰度图像读取为 RGB,因为 VGG16 预训练模型需要 3 个通道输入。这是我的代码:

from keras.applications import VGG16
#Load the VGG model
#Camera Model
vgg_conv_C = VGG16(weights='imagenet', include_top=False, input_shape=(227, 227, 3))
#Depth Model
vgg_conv_D = VGG16(weights='imagenet', include_top=False, input_shape= (227, 227, 3))
for layer in vgg_conv_D.layers[:-4]:
    layer.trainable = False 
for layer in vgg_conv_C.layers[:-4]:
    layer.trainable = False 
mergedModel = Concatenate()([vgg_conv_C.output,vgg_conv_D.output])
mergedModel = Dense(units = 1024)(mergedModel)
mergedModel = BatchNormalization()(mergedModel)
mergedModel = …
Run Code Online (Sandbox Code Playgroud)

classification concatenation fusion lidar keras

3
推荐指数
1
解决办法
2134
查看次数

使用 Keras 和 Python 进行一类分类

介绍和问题:

我正在尝试制作一个一类分类卷积神经网络。一类是指我有一个图像数据集,其中包含大约 200 张 Nicolas Cage 的图像。通过一类分类,我的意思是查看图像并预测 1 如果此图像中包含 Nicolas Cage 并预测 0 Nicolas Cage 不包含在图像中。

我绝对是一个机器学习/深度学习初学者,所以我希望有更多知识和经验的人可以帮助指导我朝着正确的方向前进。这是我现在的问题和问题。我的网络表现非常糟糕。我试过用 Nicolas Cage 的图像进行一些预测,每次都预测为 0。

  • 我应该收集更多数据以使其工作吗?我正在使用包含 207 个图像的小数据集执行数据增强。我希望数据增强能帮助网络泛化,但我认为我错了
  • 我应该尝试调整 epoch 的数量、每 epoch 的步数、val 步数还是我用于梯度下降的优化算法?我正在使用 Adam,但我想也许我应该尝试使用不同学习率的随机梯度下降?
  • 我应该添加更多卷积层还是密集层来帮助我的网络更好地泛化和学习?
  • 我是否应该停止尝试进行一类分类并进行正常的二元分类,因为使用具有一类分类的神经网络不太可行?我在这里看到了这篇文章,用 keras 进行一类分类,似乎 OP 最终使用了隔离森林。所以我想我可以尝试使用一些卷积层并输入隔离森林或 SVM?我找不到很多关于人们使用具有一类图像分类的隔离森林的信息或教程。

数据集:

这是我使用名为 google-images-download 的包收集的数据集外观的屏幕截图。它包含大约 200 张尼古拉斯凯奇的图像。我做了两次搜索以下载 500 张图片。手动清理图像后,我只剩下 200 张 Nic Cage 质量的图片。 数据集


进口及型号:

from keras.models import Sequential
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense
from keras.layers import …
Run Code Online (Sandbox Code Playgroud)

python classification deep-learning conv-neural-network keras

3
推荐指数
2
解决办法
7468
查看次数

Pytorch 默认数据加载器因大型图像分类训练集而卡住

我正在 Pytorch 中训练图像分类模型,并使用其默认数据加载器来加载我的训练数据。我有一个非常大的训练数据集,因此每个类通常有几千个样本图像。过去我已经用大约 20 万张图像训练过模型,没有出现任何问题。然而我发现,当图像总数超过一百万张时,Pytorch 数据加载器就会卡住。

\n\n

我相信当我打电话时代码挂起datasets.ImageFolder(...)。当我按下 Ctrl-C 时,输出始终如下:

\n\n
Traceback (most recent call last):                                                                                                 \xe2\x94\x82\n  File "main.py", line 412, in <module>                                                                                            \xe2\x94\x82\n    main()                                                                                                                         \xe2\x94\x82\n  File "main.py", line 122, in main                                                                                                \xe2\x94\x82\n    run_training(args.group, args.num_classes)                                                                                     \xe2\x94\x82\n  File "main.py", line 203, in run_training                                                                                        \xe2\x94\x82\n    train_loader = create_dataloader(traindir, tfm.train_trans, shuffle=True)                                                      \xe2\x94\x82\n  File "main.py", line 236, in create_dataloader                                                                                   \xe2\x94\x82\n    dataset = datasets.ImageFolder(directory, trans)                                                                               \xe2\x94\x82\n  File "/home/username/.local/lib/python3.5/site-packages/torchvision/datasets/folder.py", line 209, in __init__     \xe2\x94\x82\n    is_valid_file=is_valid_file)                                                                                                   \xe2\x94\x82\n  File "/home/username/.local/lib/python3.5/site-packages/torchvision/datasets/folder.py", line 94, in __init__ …
Run Code Online (Sandbox Code Playgroud)

classification computer-vision deep-learning pytorch dataloader

3
推荐指数
1
解决办法
4673
查看次数

图像分类迁移学习需要负例吗?

任务是确定图像属于 3 个类中的哪一个,或者不属于。

我收到了一个现成的模型。具有 ImageNet 权重的 EfficientNet B4 已应用迁移学习来识别 4 个类别:3 个目标类别和第 4 个“无”。后者接受了不包含任何目标对象的随机图像示例的训练。

问题是这是否是正确的方法——是否需要第四堂课?

我的直觉是 net 应该只在 3 个目标类上进行训练。如果输出概率保持在某个阈值(90%?)以下,图像应被视为不包含任何目标对象。我对吗?

classification neural-network keras tensorflow efficientnet

3
推荐指数
1
解决办法
266
查看次数

sklearn:多类问题和报告敏感性和特异性

我有一个三类问题,我可以使用以下代码报告每个类的精确度和召回率:

from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))
Run Code Online (Sandbox Code Playgroud)

这为我提供了表格格式中 3 个类别中每一个类别的精确度和召回率。

我的问题是现在如何才能获得这 3 个类别中每一个类别的敏感性和特异性?我查看了 sklearn.metrics,没有找到任何报告敏感性和特异性的内容。

python classification scikit-learn supervised-learning

3
推荐指数
1
解决办法
5519
查看次数