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

質問編集履歴

1

見出し、シンタックスハイライトを付けました。

2016/01/19 04:32

投稿

SHOWHEYHEI
SHOWHEYHEI

スコア8

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- 学校でK-MEANS(k平均法)をpython3で実装する課題をやっています。
1
+ ##学校でK-MEANS(k平均法)をpython3で実装する課題をやっています。
2
2
 
3
3
  クラスタリングの箇所がうまくいかなくて悩んでいます。
4
4
 
@@ -8,49 +8,53 @@
8
8
 
9
9
 
10
10
  ↓最初にユークリッド関数を定義して
11
-
11
+ ```lang-python
12
- def EucDist(a,b):
12
+ def EucDist(a,b)
13
13
  """
14
14
  ユーグリット距離を求める関数
15
15
  """
16
16
  return np.sqrt(np.power(a-b, 2).sum())
17
17
 
18
-
18
+ ```
19
19
  ↓irisデータを読み込んで
20
-
20
+ ```
21
21
  f = open("iris.data","r")
22
22
  text = f.read()
23
23
  f.close
24
-
24
+ ```
25
25
  ↓カンマで区切って
26
+ ```
26
27
  a=text.replace("\n",",")#改行をカンマに変える
27
28
  b=a.split(",")#カンマで区切る
28
29
  c=[b[i:i+5] for i in range(0,752,5)]#4次元の座標データとクラスター
29
30
  c
30
-
31
+ ```
31
32
  ↓座標点とクラスに分けて
33
+ ```
32
34
  data=[]
33
35
  for i in range(150):
34
36
  i=i*5
35
37
  cb = [[float(b[i]),float(b[i+1]),float(b[i+2]),float(b[i+3])],b[i+4]]
36
38
  data.append(cb)
37
39
  data
38
-
40
+ ```
39
41
  ↓座標点だけ取りだして
42
+ ```
40
43
  cd = []#irisデータの座表点のみ格納するリスト
41
44
  for i in range(len(data)):
42
45
  cd.append(data[i][0])
43
46
  cd
44
-
47
+ ```
45
48
  ↓重心の初期値をirisデータからランダムに選んで
49
+ ```
46
50
  k=3
47
51
  cent=[]
48
52
  for i in range(k):
49
53
  cent.append(random.choice(cd))#cdからランダムに重心を3つ取り出す
50
54
  cent
51
-
55
+ ```
52
56
  ↓クラスタリング
53
-
57
+ ```
54
58
  cmp=[]#ユークリッド距離を一時的に格納するリスト
55
59
  k0=[]#クラスタ1を格納するリスト
56
60
  k1=[]#クラスタ2を格納するリスト
@@ -78,7 +82,7 @@
78
82
  print("クラスタ1: ",k0)
79
83
  print("クラスタ2: ",k1)
80
84
  print("クラスタ3: ",k2)
81
-
85
+ ```
82
86
  実行すると各クラスタのリストに何も要素が入らなかったです。
83
87
 
84
88
  この後、各リストに入っている座標の平均を求め、それを新たな重心値として上記のソースコードの処理