我正在使用 python 来解决学习排序问题,并且我正在使用以下 DCG 和 NDCG 代码(来自http://nbviewer.ipython.org/github/ogrisel/notebooks/blob/master/Learning %20to%20Rank.ipynb )
def dcg(relevances, rank=20):
relevances = np.asarray(relevances)[:rank]
n_relevances = len(relevances)
if n_relevances == 0:
return 0.
discounts = np.log2(np.arange(n_relevances) + 2)
return np.sum(relevances / discounts)
def ndcg(relevances, rank=20):
best_dcg = dcg(sorted(relevances, reverse=True), rank)
if best_dcg == 0:
return 0.
return dcg(relevances, rank) / best_dcg
Run Code Online (Sandbox Code Playgroud)
以下是 3 个项目列表中最好和最坏情况的 DCG 值,没有重复的排名...
>>> ndcg(np.asarray([3,2,1]))
1.0
>>> ndcg(np.asarray([1,2,3]))
0.78999800424603583
Run Code Online (Sandbox Code Playgroud)
我们可以使用这个指标来比较两个排名,看看哪个更好。但是,如果我计算 4 项列表的最坏情况......
>>> ndcg(np.asarray([1,2,3,4]))
0.74890302967841715
Run Code Online (Sandbox Code Playgroud)
4 项列表似乎不再与 3 项列表具有可比性。
我还计算了两个替代的 NDCG。NDCG2 将获得的 dcg 与 bot …
python information-retrieval machine-learning ranking-functions supervised-learning
我正在为可能有多个可能的分类器的问题编写机器学习解决方案,具体取决于数据.所以我收集了几个分类器,在某些情况下,每个分类器的性能都优于其他分类器.我正在研究元分类策略,我看到有几种算法.任何人都可以指出它们之间的根本区别吗?
如何使用Subsequence String Kernel(SSK)[Lodhi 2002]在Python中训练SVM(支持向量机)?
我有数以千计的向量,每个向量约有20个特征.
给定一个查询向量和一组潜在匹配,我希望能够选择最佳N匹配.
我花了几天时间尝试回归(使用SVM),使用我自己创建的数据集训练模型:每个向量是查询向量和结果向量的串联,我给出一个得分(主观评估)介于0和1,0之间,完美匹配,1匹配最差匹配.
我没有取得很好的成绩,我相信一个原因可能是主观上很难分配这些分数.另一方面,更容易的是主观地对结果score进行排名(作为未知函数):
score(query, resultA) > score(query, resultB) > score(query, resultC)
Run Code Online (Sandbox Code Playgroud)
所以我认为这更像是一个学习排名的问题,我发现了Python的各种链接:
但我无法理解它是如何运作的.我真的很困惑所有的术语,成对排名等...(请注意,我对机器学习一无所知,因此我感觉有点迷失)等...所以我不明白如何应用这个我的问题.
有人可以帮我澄清事情,指出我想解决的问题的确切类别,甚至更好的我如何用Python实现这个(scikit-learn)?
是什么让 t-sne 受到监督?
维基百科将t-sne 算法归类为监督方法。我读到监督方法涉及训练、输入和期望结果。
我在想,t-sne 的目标是最小化 Kullback-Leibler 分歧。将这种差异最小化是否算作“预期结果”,从而使其受到监督?
我有一个包含二进制分类问题的不平衡数据集.我已经构建了随机森林分类器并使用了10倍折叠交叉验证.
kfold = model_selection.KFold(n_splits=10, random_state=42)
model=RandomForestClassifier(n_estimators=50)
Run Code Online (Sandbox Code Playgroud)
我得到了10倍的结果
results = model_selection.cross_val_score(model,features,labels, cv=kfold)
print results
[ 0.60666667 0.60333333 0.52333333 0.73 0.75333333 0.72 0.7
0.73 0.83666667 0.88666667]
Run Code Online (Sandbox Code Playgroud)
我通过取结果的均值和标准差来计算准确度
print("Accuracy: %.3f%% (%.3f%%)") % (results.mean()*100.0, results.std()*100.0)
Accuracy: 70.900% (10.345%)
Run Code Online (Sandbox Code Playgroud)
我计算了我的预测如下
predictions = cross_val_predict(model, features,labels ,cv=10)
Run Code Online (Sandbox Code Playgroud)
由于这是一个不平衡的数据集,我想计算每个折叠的精度,召回率和f1分数并对结果取平均值.如何计算python中的值?
python random-forest scikit-learn cross-validation supervised-learning
我正在使用CNN输入图像的大小在哪里进行分类问题,64X64并且我想使用预训练模型,例如VGG16,COCO或任何其他模型。但是问题是预训练模型的输入图像大小是224X224。如何解决此问题。输入的图像大小是否有任何数据扩充方法。
如果我将输入图像的大小调整为,224X224则图像出现模糊的可能性很大,这可能会影响训练。如果我错了,请纠正我。
另一个问题与预训练模型有关。如果我正在使用,transfer learning那么通常我必须如何冻结预训练模型中的图层。考虑到我的分类与预训练的模型类非常不同。但是我想我们可以冻结它的前几层以获得图像的边缘,曲线等,这在所有图像中都很常见。
artificial-intelligence machine-learning supervised-learning deep-learning conv-neural-network
我正在尝试使用这些包quanteda,caret并根据经过训练的样本对文本进行分类.作为试运行,我想比较的内置的朴素贝叶斯分类器quanteda与的那些caret.但是,我似乎caret无法正常工作.
这是一些复制代码.首先是quanteda侧面:
library(quanteda)
library(quanteda.corpora)
library(caret)
corp <- data_corpus_movies
set.seed(300)
id_train <- sample(docnames(corp), size = 1500, replace = FALSE)
# get training set
training_dfm <- corpus_subset(corp, docnames(corp) %in% id_train) %>%
dfm(stem = TRUE)
# get test set (documents not in id_train, make features equal)
test_dfm <- corpus_subset(corp, !docnames(corp) %in% id_train) %>%
dfm(stem = TRUE) %>%
dfm_select(pattern = training_dfm,
selection = "keep")
# train model on sentiment
nb_quanteda <- textmodel_nb(training_dfm, …Run Code Online (Sandbox Code Playgroud) 我可以找到使用随机森林进行预测的所有示例已经具有实际答案(即测试集具有标签).当你没有那个专栏时你会怎么做?
例如,本教程使用虹膜数据:http://mkseo.pe.kr/stats/?p = 220
如果我们这样做是真实的,那么测试数据集将有列[1,4]而不是第5列.如果你尝试在没有第5列的情况下运行它,它会引发一个错误,即数据帧的大小不同,这显然是他们不是.
当您还没有一列答案时,如何进行预测?
使用以上链接中的摘录编辑澄清:
准备培训和测试集.
test = iris[ c(1:10, 51:60, 101:110), ]
train = iris[ c(11:50, 61:100, 111:150), ]
Run Code Online (Sandbox Code Playgroud)
测试数据框具有完整的物种列.我试图根据我从训练集中生长的森林来预测物种.所以我所处的位置是在跑完之后:
test <- test[-5]
Run Code Online (Sandbox Code Playgroud)
如果我出去收集了一堆植物测量结果并想根据我从训练数据中增长的树模型了解物种,我现在处于我所处的位置.那么,我如何基于测试数据框中的剩余数据和使用训练数据框增长的森林来预测我刚刚删除的Species列?
阅读《高效文本分类技巧袋》后,我有点困惑。wordNgramsargs和minn之间有什么区别maxn
例如,文本分类任务和 Glove 嵌入为 pretrainedVectors
ft.train_supervised(file_path,lr=0.1,epoch=5,wordNgrams=2,dim=300,loss='softmax', minn=2,maxn=3,pretrainedVectors='glove.300d.txt',verbose=0)
Run Code Online (Sandbox Code Playgroud)
输入句子是“我爱你”。给定minn=2,maxn=3,整个句子转化为[<I, I>], [<l, <lo, lo, lov,.....]etc 对于love这个词,它的fasttext嵌入= (emb(love)(作为一个完整的词)+ emb(<l)+emb(<lo)+。 ...) / n. 对于句子,它被分成[I love, love you](因为 wordNgrams=2) 并且这些 2-gram 嵌入是[(fasttext emb(I)+fasttext emb(love))/2, (fasttext emb(love)+fasttext emb(you))/2]。句子嵌入是 2-gram 嵌入的平均值,维数为 300。然后它通过具有 #labels 神经元的层(即乘以大小为 [300, #labels] 的矩阵)。
这是正确的吗?如果我错了请纠正我