use*_*576 4 python machine-learning svm
我使用Sklearn编写了Python代码来聚类我的数据集:
af = AffinityPropagation().fit(X)
cluster_centers_indices = af.cluster_centers_indices_
labels = af.labels_
n_clusters_= len(cluster_centers_indices)
Run Code Online (Sandbox Code Playgroud)
我正在探索使用群集查询,因此通过以下方式形成初始训练数据集:
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])
Run Code Online (Sandbox Code Playgroud)
然后,我通过以下方式训练我的模型(SVM):
clf = svm.SVC()
clf.fit(X, data_y)
Run Code Online (Sandbox Code Playgroud)
我希望编写一个函数,给定中心,模型,X值和Y值将附加模型最不确定的5个数据点,即.最接近超平面的数据点.我怎样才能做到这一点?
您的过程的第一步对我来说并不完全清楚,但这里建议"选择最接近SVM超平面的5个数据点".scikit文档定义decision_function
为样本到分离超平面的距离.该方法返回一个数组,该数组可以进行排序argsort
以找到"顶部/底部N个样本".
在此基本scikit示例之后,定义一个函数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]
Run Code Online (Sandbox Code Playgroud)
将这两行添加到scikit示例中以查看已实现的功能:
closest_samples = closestN(X, 5)
plt.scatter(X[closest_samples][:, 0], X[closest_samples][:, 1], color='yellow')
Run Code Online (Sandbox Code Playgroud)
如果您需要将样本附加到某个列表,您可以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]])
Run Code Online (Sandbox Code Playgroud)