python 无监督学习 DBSCAN scikit 应用示例

我有一份列表,希望对其进行无监督学习,并利用所学知识来预测测试列表中每个项目的值

#格式 [real_runtime, processors, requested_time, score, more_to_be_added]#列表中的一些条目

训练数据集

Xsrc = [['354', '2048', '3600', '53.0521472395'],       ['605', '2048', '600', '54.8768871369'],       ['128', '2048', '600', '51.0'],       ['136', '2048', '900', '51.0000000563'],       ['19218', '480', '21600', '51.0'],       ['15884', '2048', '18000', '51.0'],       ['118', '2048', '1500', '51.0'],       ['103', '2048', '2100', '51.0000002839'],       ['18542', '480', '21600', '51.0000000001'],       ['13272', '2048', '18000', '51.0000000001']]

测试数据集

利用这些聚类,我希望预测一份新列表的 real_runtime:Xtest= [[‘-1’, ‘2048’, ‘1500’, ‘51.0000000161’], [‘-1’, ‘2048’, ‘10800’, ‘51.0000000002’], [‘-1’, ‘512’, ‘21600’, ‘-1’], [‘-1’, ‘512’, ‘2700’, ‘51.0000000004’], [‘-1’, ‘1024’, ‘21600’, ‘51.1042617556’]]

代码:格式化列表并使用Python中的scikit进行聚类和绘制聚类图

from sklearn.feature_selection import VarianceThresholdimport numpy as npfrom sklearn.cluster import DBSCANfrom sklearn import metricsfrom sklearn.datasets.samples_generator import make_blobsfrom sklearn.preprocessing import StandardScalerimport matplotlib.pyplot as plt##训练数据集Xsrc = [['354', '2048', '3600', '53.0521472395'],       ['605', '2048', '600', '54.8768871369'],       ['128', '2048', '600', '51.0'],       ['136', '2048', '900', '51.0000000563'],       ['19218', '480', '21600', '51.0'],       ['15884', '2048', '18000', '51.0'],       ['118', '2048', '1500', '51.0'],       ['103', '2048', '2100', '51.0000002839'],       ['18542', '480', '21600', '51.0000000001'],       ['13272', '2048', '18000', '51.0000000001']]print "Xsrc:", Xsrc##测试数据集Xtest= [['1224', '2048', '1500', '51.0000000161'],       ['7867', '2048', '10800', '51.0000000002'],       ['21594', '512', '21600', '-1'],        ['1760', '512', '2700', '51.0000000004'],       ['115', '1024', '21600', '51.1042617556']]##聚类 X = StandardScaler().fit_transform(Xsrc)db = DBSCAN(min_samples=2).fit(X) #没有聚类参数,使用默认的epscore_samples_mask = np.zeros_like(db.labels_, dtype=bool)core_samples_mask[db.core_sample_indices_] = Truelabels = db.labels_n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)clusters = [X[labels == i] for i in xrange(n_clusters_)]print('估计的聚类数量: %d' % n_clusters_)print("轮廓系数: %0.3f" % metrics.silhouette_score(X, labels))##绘制数据集unique_labels = set(labels)colors = plt.cm.Spectral(np.linspace(0, 1, len(unique_labels)))for k, col in zip(unique_labels, colors):    if k == -1:        # 噪声使用黑色表示。        col = 'k'    class_member_mask = (labels == k)    xy = X[class_member_mask & core_samples_mask]    plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=col,             markeredgecolor='k', markersize=20)    xy = X[class_member_mask & ~core_samples_mask]    plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=col,             markeredgecolor='k', markersize=10)plt.title('估计的聚类数量: %d' % n_clusters_)plt.show()

有什么方法可以利用这些聚类来预测值吗?


回答:

聚类不是预测

“预测”聚类标签几乎没有用处,因为聚类算法只是“随机”分配的标签。

更糟糕的是:大多数算法无法纳入新数据。

你真的应该使用聚类来探索你的数据,了解数据中有什么和没有的东西。不要依赖聚类是“好”的这一假设。

有时,人们通过将数据集量化为k个中心,并仅使用这个“压缩”数据集进行分类/预测(通常仅基于最近邻),取得了一些成功。我还看到过针对每个聚类训练一个回归模型用于预测,并通过最近邻选择应用哪个回归器的想法(即,如果数据很好地适合某个聚类,则使用该聚类的回归模型)。但我不记得有任何重大的成功案例…

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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