我有一个重复的字符串数据集如下。
[建筑维修&维护,书籍,光盘,音像,文具,其他 服务,建筑维修&维护]
我想使用上面的数据集在一个集群中聚集相同的值。 输出应为
[建筑维修&维护,建筑维修& 维护,......] [其他服务,其他服务,......]
答案 0 :(得分:-1)
不确定您想要什么,以及它与机器学习有什么关系。但是你可以在python中轻松实现上述结果,而无需使用机器学习或kmeans集群。
以下是示例代码:
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]*count[key]
如果你能更详细地阐述你的问题以及它与机器学习有何关系,那就太棒了。
您是在谈论在列表中查找类似的文本,例如 [书籍 - 音频 - CD,音频,教科书,建筑维修和维护,维修和保养,维修]
给出以下输出
[书籍 - 音频 - CD,音频,教科书] [建筑维修和保养,公寓服务,维修]
这是更适合使用机器学习和聚类的地方,因为在这种情况下字符串不是完全匹配,而是在上下文和含义上彼此相关。
对于Bag of words方法,您可以从此代码中获取指南。然而,这只是我刚才所做的基本实现,需要进行修改以添加必要的功能,例如词干,停止删除单词和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)
#Sample Initialization of K-means. Assuming number of clusters to be 2.
km = KMeans(n_clusters=2, init='random', n_init=1)
km.fit(train_fit)
print km.labels_
基于公共数据集的简单移动平均线实施。为此,我将值保存在临时文件名so.csv。
中首先,在查看您的数据时,我认为您根本不需要对类别使用聚类技术,因为所有特定类别都完全相同。您可以轻松地过滤掉或使用分组来获取相同类别的行。
其次,由于我们不再关注聚类,因此不需要对不同的字符串进行加权平均。
虽然此方法为每个类别提供预测值。我认为像arima这样更强大的方法会更适合您的情况,因为您的数据显然反映了强烈的趋势和季节性暗示
所有这些建议完全基于您提供的公共数据集。
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:",category,"\t\nNext Predicted Amount(Moving Average Value [Past 3 Months]) :",ma,"\n"
# To plot the values you can uncomment the below given code.
# y = list(filtered['Amount'])
# y.extend([ma])
# x = np.array(range(len(y)))
# plt.plot(x, y)
# plt.show()