假设我有一些分类器,模型只是y = tf.matmul(x, W) + b
,然后我用softmax来获取概率,如下所示:
{
"dog_bark": "53.2912",
"siren": "46.7088"
}
但我希望它看起来更像这样:
{
"dog_bark": "0.25",
"siren": "0.25",
"none": "99.5"
}
我知道我可以添加一个带有随机功能集的非类,但这看起来很麻烦且耗时。我甚至不确定这是否准确 - 因为现实世界说,熊可能比随机数据更接近狗吠。是否有一些首选方法可以实现无类或类似的影响?
(理想情况下,没有捏造它没有的可能性)
答案 0 :(得分:1)
如果您无法访问“无”类的真实示例,并且您不想要hacky解决方案(如生成它们,在问题中提出),那么剩下的唯一方法是学习生成模型而不是判别模型。换句话说,如果你学习每个(观察的)y的P(x | y)和P(y),那么你也有P(x)= SUM_i P(x | y = i)P(y = i),这是您所见过的任何类的概率。唯一缺少的是设置一个阈值T(或更复杂的决定方法),在该阈值下,您将样本放入“无”类。不幸的是,学习生成模型通常比典型的判别模型困难得多,但你的问题也更难(因为你希望你的模型“意识到非观察样本”)。或者,您可以独立于分类器学习P(x),并将其用作数据的“预过滤”,因此假设您使用某种密度估算技术(GMM,KDE等)学习P(x),以及然后根据以下内容进行分类:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/greet"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/greet"
android:textSize="25sp" android:gravity="center" android:paddingTop="25sp" />
<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/sachin" android:paddingTop="25sp" />
<TextView
android:textColor="#ffffff"
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/langselection"
android:textAppearance="?android:attr/textAppearanceMedium" android:gravity="center" android:paddingTop="25sp"/>
<Spinner
android:popupBackground="#ff004372"
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/languages"
android:gravity="center" android:paddingTop="25sp" />
</LinearLayout>a
很容易证明以上是有效概率,因为NEW_P(y=i|x) = P(x)*P(y=i|x)
NEW_P(y=none|x) = 1-P(x)
。
简而言之,你现在正在做的只给你P(y = i | x),并且有辨别力学习的整个技巧是你可以省略P(x)。对于你正在考虑的问题,你实际上需要它(除非你想要hacky事情/收集数据)。并且至少有几种方法可以学习(和使用)它。