我正在尝试确定大型集合中的成对项目之间的相似性。这些项目有多个属性,我能够计算每个属性的离散相似度分数(介于 0 和 1 之间)。我根据属性使用各种分类器:TF-IDF 余弦相似度、朴素贝叶斯分类器等。
当我将所有这些信息编译成所有项目的最终相似度分数时,我陷入了困境。我不能只取未加权的平均值,因为 1)什么是高分取决于分类器,2)某些分类器比其他分类器更重要。另外,一些分类器应该只考虑它们的高分,即高分表示较高的相似度,但较低的分没有意义。
到目前为止,我已经通过猜测计算了最终分数,但分类器数量的增加使得这是一个非常糟糕的解决方案。有什么技术可以确定一个最佳公式,该公式将采用我的各种分数并仅返回一个分数?值得注意的是,系统确实会收到人类反馈,这就是一些分类器的工作原理。
最终我只对每个项目最相似的排名感兴趣。绝对分数本身是没有意义的,只有它们的顺序很重要。
我像这样使用 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?
在许多其他示例中,我看到人们将语料库分为训练集和测试集。但是,由于我使用的 …
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
我生成了一些分数来帮助预测某些内容是“是”(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。有什么好的方法可以做到这一点?我需要什么功能/包?
我得到的错误是这样的。我的数据的子集 [~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) 我正在研究一个项目中的分类问题。我的问题的特殊性是我必须使用两种不同类型的数据来管理它。我的课程包括汽车、行人、卡车和自行车。我的数据集由以下部分组成:
我已经成功地使用这两种模式,以便通过使用 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) 我正在尝试制作一个一类分类卷积神经网络。一类是指我有一个图像数据集,其中包含大约 200 张 Nicolas Cage 的图像。通过一类分类,我的意思是查看图像并预测 1 如果此图像中包含 Nicolas Cage 并预测 0 Nicolas Cage 不包含在图像中。
我绝对是一个机器学习/深度学习初学者,所以我希望有更多知识和经验的人可以帮助指导我朝着正确的方向前进。这是我现在的问题和问题。我的网络表现非常糟糕。我试过用 Nicolas Cage 的图像进行一些预测,每次都预测为 0。
这是我使用名为 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
我正在 Pytorch 中训练图像分类模型,并使用其默认数据加载器来加载我的训练数据。我有一个非常大的训练数据集,因此每个类通常有几千个样本图像。过去我已经用大约 20 万张图像训练过模型,没有出现任何问题。然而我发现,当图像总数超过一百万张时,Pytorch 数据加载器就会卡住。
\n\n我相信当我打电话时代码挂起datasets.ImageFolder(...)。当我按下 Ctrl-C 时,输出始终如下:
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 个类中的哪一个,或者不属于。
我收到了一个现成的模型。具有 ImageNet 权重的 EfficientNet B4 已应用迁移学习来识别 4 个类别:3 个目标类别和第 4 个“无”。后者接受了不包含任何目标对象的随机图像示例的训练。
问题是这是否是正确的方法——是否需要第四堂课?
我的直觉是 net 应该只在 3 个目标类上进行训练。如果输出概率保持在某个阈值(90%?)以下,图像应被视为不包含任何目标对象。我对吗?
我有一个三类问题,我可以使用以下代码报告每个类的精确度和召回率:
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))
Run Code Online (Sandbox Code Playgroud)
这为我提供了表格格式中 3 个类别中每一个类别的精确度和召回率。
我的问题是现在如何才能获得这 3 个类别中每一个类别的敏感性和特异性?我查看了 sklearn.metrics,没有找到任何报告敏感性和特异性的内容。
classification ×10
python ×4
keras ×3
scikit-learn ×3
calibration ×1
dataloader ×1
efficientnet ×1
fusion ×1
gbm ×1
grid-search ×1
h2o ×1
lidar ×1
pytorch ×1
r ×1
roc ×1
tensorflow ×1
xgboost ×1