【问题标题】:Select 5 data points closest to SVM hyperlane选择最接近 SVM 超车道的 5 个数据点
【发布时间】:2017-05-17 12:31:50
【问题描述】:

我已经使用 Sklearn 编写了 Python 代码来对我的数据集进行聚类:

af = AffinityPropagation().fit(X)
cluster_centers_indices = af.cluster_centers_indices_
labels = af.labels_
n_clusters_= len(cluster_centers_indices)

我正在探索按集群查询的使用,因此通过以下方式形成初始训练数据集:

td_title =[]
td_abstract = []
td_y= []
for each in centers:
    td_title.append(title[each])
    td_abstract.append(abstract[each])
    td_y.append(y[each])

然后我通过以下方式训练我的模型(一个 SVM):

clf = svm.SVC()
clf.fit(X, data_y)

我希望编写一个函数,给定中心、模型、X 值和 Y 值将附加模型最不确定的 5 个数据点,即。离超平面最近的数据点。我该怎么做?

【问题讨论】:

    标签: python machine-learning svm


    【解决方案1】:

    您的流程的第一步对我来说并不完全清楚,但这里有“选择(ing)5 个最接近 SVM 超平面的数据点”的建议。 scikit 文档将decision_function 定义为样本到分离超平面的距离。该方法返回一个数组,可以使用argsort 进行排序以查找“顶部/底部N 个样本”。

    this basic scikit example 之后,定义一个函数closestN 以返回最接近超平面的样本。

    import numpy as np
    
    def closestN(X_array, n):
        # array of sample distances to the hyperplane
        dists = clf.decision_function(X_array)
        # absolute distance to hyperplane
        absdists = np.abs(dists)
    
        return absdists.argsort()[:n]
    

    将这两行添加到 scikit 示例中以查看实现的功能:

    closest_samples = closestN(X, 5)
    plt.scatter(X[closest_samples][:, 0], X[closest_samples][:, 1], color='yellow')
    

    原创

    突出显示最近的样本

    如果您需要将示例附加到某个列表,您可以somelist.append(closestN(X, 5))。如果您需要示例值,您可以执行 somelist.append(X[closestN(X, 5)]) 之类的操作。

    closestN(X, 5)
    array([ 1, 20, 14, 31, 24])
    
    X[closestN(X, 5)]
    array([[-1.02126202,  0.2408932 ],
           [ 0.95144703,  0.57998206],
           [-0.46722079, -0.53064123],
           [ 1.18685372,  0.2737174 ],
           [ 0.38610215,  1.78725972]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      相关资源
      最近更新 更多