teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2019/03/18 03:21

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -50,4 +50,4 @@
50
50
 
51
51
  ```
52
52
 
53
- 今思いついた注意点ですが、データ数が1万もあるときっとそれなりに高次元の特徴量になるので、PCAとかで次元を落とした方が速いかもしれません。それく
53
+ 今思いついた注意点ですが、データ数が1万もあるときっとそれなりに高次元の特徴量になるので、`min_df`を指定して削った上でPCAとかで次元を落とさないと度の面で実用的ではないかもしれません。あとはクラスタリング周りはいろいろ手法やパラメータ(含むクラスタ数)を試行錯誤した上で、結果が出たならの妥当性も何かの方法で検証するべきでしょう

1

追記

2019/03/18 03:21

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -4,4 +4,50 @@
4
4
 
5
5
  [sklearn.feature_extraction.text.CountVectorizer — scikit-learn 0.20.3 documentation](https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html)
6
6
  [sklearn.feature_extraction.DictVectorizer — scikit-learn 0.20.3 documentation](https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.DictVectorizer.html)
7
- [sklearn.cluster.KMeans — scikit-learn 0.20.3 documentation](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html)
7
+ [sklearn.cluster.KMeans — scikit-learn 0.20.3 documentation](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html)
8
+
9
+ ##### 追記
10
+ やってみたら鼻歌交じりで五分のコーディングでした。簡単すぎるかも。
11
+
12
+ ```python
13
+ import pandas as pd
14
+ from sklearn.feature_extraction.text import CountVectorizer
15
+ from sklearn.cluster import KMeans
16
+
17
+ def main():
18
+ data = ["abc-123-S-1",
19
+ "abc-151521-S1",
20
+ "acd-321-SF-1",
21
+ "abc-213-S-1",
22
+ "abc151512-S1"]
23
+ cv = CountVectorizer(lowercase=False, analyzer="char",
24
+ ngram_range=(1, 3))
25
+ X = cv.fit_transform(data)
26
+
27
+ km = KMeans(n_clusters=3)
28
+ y = km.fit_predict(X)
29
+ df = pd.DataFrame({"data":data, "cluster":y})
30
+ for cluster_i, x in df.groupby("cluster"):
31
+ print("cluster:", cluster_i)
32
+ print(x)
33
+
34
+ if __name__ == "__main__":
35
+ main()
36
+
37
+ """ =>
38
+ cluster: 0
39
+ cluster data
40
+ 2 0 acd-321-SF-1
41
+ cluster: 1
42
+ cluster data
43
+ 1 1 abc-151521-S1
44
+ 4 1 abc151512-S1
45
+ cluster: 2
46
+ cluster data
47
+ 0 2 abc-123-S-1
48
+ 3 2 abc-213-S-1
49
+ """
50
+
51
+ ```
52
+
53
+ 今思いついた注意点ですが、データ数が1万もあるときっとそれなりに高次元の特徴量になるので、PCAとかで次元を落とした方が速いかもしれません。それくらい。