Machine learning 如何将连续的余弦θ分数压缩为离散(0/1)输出?

Machine learning 如何将连续的余弦θ分数压缩为离散(0/1)输出?,machine-learning,softmax,sigmoid,Machine Learning,Softmax,Sigmoid,我实现了一个余弦θ函数,它计算两篇文章之间的关系。如果两篇文章非常相似,那么单词应该包含相当多的重叠。然而,余弦θ分数为0.54并不意味着“相关”或“不相关”。最后我应该给出一个明确的答案,0表示“不相关”,1表示“相关” 我知道有sigmoid函数和softmax函数,但我应该找到这些函数的最佳参数,我不知道这些函数是否是令人满意的解。我在想,我有余弦θ分数,我可以计算两句话之间重叠的百分比(例如,重叠单词的数量除以文章中的单词数量),也许还有一些更有趣的事情。然后利用这些数据,我可以编写一个

我实现了一个余弦θ函数,它计算两篇文章之间的关系。如果两篇文章非常相似,那么单词应该包含相当多的重叠。然而,余弦θ分数为0.54并不意味着“相关”或“不相关”。最后我应该给出一个明确的答案,0表示“不相关”,1表示“相关”

我知道有sigmoid函数和softmax函数,但我应该找到这些函数的最佳参数,我不知道这些函数是否是令人满意的解。我在想,我有余弦θ分数,我可以计算两句话之间重叠的百分比(例如,重叠单词的数量除以文章中的单词数量),也许还有一些更有趣的事情。然后利用这些数据,我可以编写一个函数(我不知道什么类型的函数,这是问题的一部分!),然后我可以通过SciPy库将错误最小化。这意味着我应该做一些监督学习,我愿意用标签(0/1)标记文章对,以便训练网络。这值得付出努力吗

        # Count words of two strings.
        v1, v2 = self.word_count(s1), self.word_count(s2)
        # Calculate the intersection of the words in both strings.
        v3 = set(v1.keys()) & set(v2.keys())

        # Calculate some sort of ratio between the overlap and the
        # article length (since 1 overlapping word on 2 words is more important
        # then 4 overlapping words on articles of 492 words).
        p = min(len(v1), len(v2)) / len(v3)

        numerator = sum([v1[w] * v2[w] for w in v3])

        w1 = sum([v1[w]**2 for w in v1.keys()])
        w2 = sum([v2[w]**2 for w in v2.keys()])

        denominator = math.sqrt(w1) * math.sqrt(w2)

        # Calculate the cosine similarity
        if not denominator:
            return 0.0
        else:
            return (float(numerator) / denominator)
如前所述,我想使用p和余弦θ分数等变量来生成一个精确的离散二进制标签,0或1

如前所述,我想使用p和余弦θ分数等变量来生成一个精确的离散二进制标签,0或1

在这里,它真正归结为你所说的准确性。除非有带标签的数据集,否则由您选择重叠如何影响两个字符串是否“匹配”。如果您有一个带标签的数据集(即一组带有0或1标签的字符串对),那么您可以训练一个二进制分类算法,并尝试在此基础上进行优化。我会推荐一些类似神经网络或支持向量机的东西,因为你的问题具有潜在的高维、分类性质

然而,即使是优化也是一个主观的衡量标准。例如,在理论上,让我们假设你有一个模型,在100个样本中只预测1个答案(给出99个未知数)。从技术上讲,如果一个答案是正确的,那就是一个准确率为100%的模型,但召回率非常低。一般来说,在机器学习中,你会在回忆和准确度之间找到一个平衡点

有些人喜欢使用结合了这两者的特定度量(其中最著名的是标准),但老实说,这取决于应用程序。如果我有一个固定预算的营销活动,那么我更关心准确性——我只想针对那些可能购买我产品的消费者。然而,如果我们正在寻找一种致命疾病或银行欺诈标志物的检测方法,那么这种检测方法的准确率只有10%是可行的——如果它的真实阳性率接近100%

最后,如果您没有标记的数据,那么您的最佳选择就是定义一些您认为指示良好匹配的截止值。这将更类似于二元聚类问题,您可以使用一些更抽象的度量,例如到质心的距离,来测试该点属于哪个簇(相关簇或不相关簇)。但是请注意,在这里,您的特性似乎难以定义

如前所述,我想使用p和余弦θ分数等变量来生成一个精确的离散二进制标签,0或1

在这里,它真正归结为你所说的准确性。除非有带标签的数据集,否则由您选择重叠如何影响两个字符串是否“匹配”。如果您有一个带标签的数据集(即一组带有0或1标签的字符串对),那么您可以训练一个二进制分类算法,并尝试在此基础上进行优化。我会推荐一些类似神经网络或支持向量机的东西,因为你的问题具有潜在的高维、分类性质

然而,即使是优化也是一个主观的衡量标准。例如,在理论上,让我们假设你有一个模型,在100个样本中只预测1个答案(给出99个未知数)。从技术上讲,如果一个答案是正确的,那就是一个准确率为100%的模型,但召回率非常低。一般来说,在机器学习中,你会在回忆和准确度之间找到一个平衡点

有些人喜欢使用结合了这两者的特定度量(其中最著名的是标准),但老实说,这取决于应用程序。如果我有一个固定预算的营销活动,那么我更关心准确性——我只想针对那些可能购买我产品的消费者。然而,如果我们正在寻找一种致命疾病或银行欺诈标志物的检测方法,那么这种检测方法的准确率只有10%是可行的——如果它的真实阳性率接近100%


最后,如果您没有标记的数据,那么您的最佳选择就是定义一些您认为指示良好匹配的截止值。这将更类似于二元聚类问题,您可以使用一些更抽象的度量,例如到质心的距离,来测试该点属于哪个簇(相关簇或不相关簇)。但是请注意,在这里,您的功能似乎难以定义。

非常感谢您花时间深入解释这一点。真是太好了。我一定会研究支持向量机和神经网络。尽管我对神经网络持怀疑态度,因为有两个原因:1。输入节点将由任意长度的2个字符组成,并拆分为单词。我认为这样的网络很难“理解”我们在比较两句话。2) 输入节点分配了权重,但这些节点只是“随机”单词(由于句子的性质)。因此,通过