使用TensorFlow的LinearClassifier和Pandas的DataFrame构建SVM

我知道这个问题,但它涉及到一个过时的函数。

假设我想预测一个人是否会访问国家’X’,已知他们已经访问过的国家和他们的收入情况。

我有一个训练数据集,格式如下,存储在一个pandas DataFrame中。

  1. 每行代表一个不同的人,这些人之间在矩阵中是彼此无关的。
  2. 前10列都是国家的名称,列中的值是二进制的(如果他们访问过该国家,则为1;如果没有访问过,则为0)。
  3. 第11列是他们的收入,是一个连续的小数变量。
  4. 最后,第12列是另一个二进制表,表示他们是否访问过’X’。

因此,如果我的数据集中有100,000人,那么我的DataFrame的维度是100,000 x 12。我想能够正确地将这些数据传递到TensorFlow的线性分类器中。但我甚至不知道如何开始处理这个问题。

我尝试将数据传递到这个函数

estimator = LinearClassifier(    n_classes=n_classes, feature_columns=[sparse_column_a,  sparse_feature_a_x_sparse_feature_b], label_keys=label_keys)

(如果有更好的估计器建议,我愿意尝试。)

我传递数据的方式如下:

df = pd.DataFrame(np.random.randint(0,2,size=(100, 12)), columns=list('ABCDEFGHIJKL'))tf_val = tf.estimator.inputs.pandas_input_fn(X.iloc[:, 0:9], X.iloc[:, 11], shuffle=True)

然而,我不确定如何将这些输出正确地传递到分类器中。我的问题设置是否正确?我没有数据科学背景,所以任何指导都会非常有帮助!

担忧

  1. 第11列是一个协变量。因此,我认为它不能直接作为一个特征传递,是吗?
  2. 如何将第11列也纳入分类器中,因为第11列的特征类型与第1列到第10列完全不同。
  3. 即使我忽略第11列,至少如何拟合第1列到第10列,并将标签设置为第12列,然后传递到分类器中?

(需要工作代码来获得赏金)


回答:

线性SVM

SVM是一种最大间隔分类器,即它最大化正类与负类之间的宽度或间隔。在二分类的情况下,线性SVM的损失函数如下所示。

enter image description here

它可以从更通用的多类线性SVM损失(也称为铰链损失)中推导出来,如下所示(其中Δ = 1)。

enter image description hereenter image description here

注意:在上述所有方程中,权重向量w包括偏置b

究竟是谁想出了这个损失函数的? 让我们深入探讨一下。

enter image description here

上图显示了属于正类的数据点与属于负类的数据点被一个分隔超平面(显示为实线)分开。然而,可以有许多这样的分隔超平面。SVM找到的分隔超平面是这样的,使得超平面到最近的正类数据点和最近的负类数据点的距离最大(显示为虚线)。

从数学上讲,SVM找到权重向量w(包括偏置)使得

enter image description here

如果正类和负类的标签(y)分别是+1-1,那么SVM找到w使得

enter image description here

• 如果一个数据点位于超平面的正确一侧(正确分类),那么

enter image description here

• 如果一个数据点位于错误一侧(错误分类),那么

enter image description here

因此,一个数据点的损失,即误分类的度量,可以写成

enter image description here

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注