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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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