使用机器学习对数据集进行聚类

我有一个如下所示的重复字符串数据集。

[Building Repairs & Maintenance,Books-CDs-Audio-Video,Stationery,Other Services,Building Repairs & Maintenance]

我想使用上述数据集将相同的值聚集到一个簇中。输出应为

[Building Repairs & Maintenance,Building Repairs & Maintenance,…][Other Services,Other Services,…]


回答:

我不确定您确切想要什么,以及这与机器学习有什么关系。但您可以在不使用机器学习或kmeans聚类的情况下,通过Python轻松实现上述结果。

以下是实现此目的的示例代码:

import collections
data = ["Building Repairs & Maintenance","Books-CDs-Audio-Video","Stationery","Other Services","Building Repairs & Maintenance"]
duplicate_count = collections.Counter(data)
for key in duplicate_count:
    print [key]*duplicate_count[key]

如果您能进一步详细说明您的问题以及它与机器学习的关系,那就太好了。

编辑 #1:

您是在说要在列表中查找相似的文本吗,例如[Books-Audio-CD, Audio, Textbook, Building Repair and Maintenance, Repair and Maintenance, Repairing]

给出以下输出

[Books-Audio-CD, Audio, Textbook][Building Repair and Maintenance, Apartment Services, Repairing]

在这种情况下,字符串不是完全匹配,但彼此在上下文和意义上是相关的,使用机器学习和聚类会更合适。

编辑 #2:

对于词袋方法,您可以参考以下代码。然而,这只是我刚刚完成的一个基本实现,需要进行修改以添加必要的功能,如词干提取、停用词删除以及使用tfidf代替简单的词袋表示,以提高准确性。

from sklearn.feature_extraction.text import CountVectorizer as _Vect
from sklearn.cluster import KMeans
simple_vectorizer = _Vect(min_df=1)
train_fit = vectorizer.fit_transform(data)
#假设聚类数为2的K-means的简单初始化。
km = KMeans(n_clusters=2, init='random', n_init=1)
km.fit(train_fit)
print km.labels_

编辑 #3

基于公共数据集的简单移动平均实现。为此,我将值保存到一个名为so.csv的临时文件中。

首先,看看您的数据,我认为您根本不需要对类别使用聚类技术,因为所有特定类别都是完全相同的。您可以轻松地过滤或使用分组来获取同一类别的行。

其次,由于我们不再关注聚类,因此没有必要为不同的字符串使用加权平均值。

虽然这种方法为每个类别提供了预测值,但我认为像arima这样的更robust的方法在您的情况下会更合适,因为您的数据明显反映出趋势和季节性的强烈暗示

所有这些建议完全基于您提供的公共数据集。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
so = pd.read_csv('so.csv',parse_dates = ['Date'])
for category in list(set(so['Category'])):
    filtered = so.loc[so['Category'] == category].sort_values(by='Date').set_index('Date')
    ma = filtered.tail(3)['Amount'].mean()
    print "类别:",category,"\t\n下一个预测金额(移动平均值 [过去三个月]) :",ma,"\n"
    # 要绘制值,您可以取消注释下面的代码。
    # y = list(filtered['Amount'])
    # y.extend([ma])
    # x = np.array(range(len(y)))
    # plt.plot(x, y)
    # plt.show()

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中创建了一个多类分类项目。该项目可以对…

发表回复

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