質問編集履歴

4

コードを```で囲った

2019/11/20 05:49

投稿

tska
tska

スコア13

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,8 @@
1
1
  混合ガウス分布とEMアルゴリズムでの手書き文字(MNISTデータセット)のクラスタリングを実行しようとしました。
2
2
 
3
+ Jupyter notebookでpythonを書いたところ、エラーメッセージで```return np.exp(-0.5 * exponents) / np.sqrt(np.linalg.det(self.covs.T).T * (2 * np.pi) ** self.ndim)```
4
+
3
- Jupyter notebookpythonを書いたところ、エラーメッセージで(34, 'Result too large')と表示され、オーバーフローによるエラーとわかったのですが、対処方法がわかりません。
5
+ の部分で(34, 'Result too large')と表示され、オーバーフローによるエラーとわかったのですが、対処方法がわかりません。
4
6
 
5
7
  よろしくお願いいたします。
6
8
 

3

誤字の修正

2019/11/20 05:49

投稿

tska
tska

スコア13

test CHANGED
File without changes
test CHANGED
@@ -184,7 +184,7 @@
184
184
 
185
185
 
186
186
 
187
- /# MNISTデータセットを実装
187
+ # MNISTデータセットを実装
188
188
 
189
189
  def main():
190
190
 

2

誤字の修正

2019/11/20 04:01

投稿

tska
tska

スコア13

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- 以下コードです。なお、文字拡大を防ぐためにここでは#の前に/を入れています。
9
+ 以下コードです。
10
10
 
11
11
 
12
12
 

1

コードを```で囲った

2019/11/20 04:00

投稿

tska
tska

スコア13

test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,9 @@
10
10
 
11
11
 
12
12
 
13
+ ```
14
+
13
- /#MNISTデータセットをダウンロード
15
+ #MNISTデータセットをダウンロード
14
16
 
15
17
  import numpy as np
16
18
 
@@ -28,7 +30,7 @@
28
30
 
29
31
 
30
32
 
31
- /#MNISTの1~255の数字を1にする
33
+ #MNISTの1~255の数字を1にする
32
34
 
33
35
  _, mnist.data, _, y = train_test_split(mnist.data, y,test_size=0.29)
34
36
 
@@ -38,55 +40,55 @@
38
40
 
39
41
 
40
42
 
41
- /#アルゴリズムの設定
43
+ #アルゴリズムの設定
42
44
 
43
45
  class GaussianMixture(object):
44
46
 
45
47
 
46
48
 
47
- def _init_(self,n_component):
49
+ def __init__(self,n_component):
48
-
50
+
49
- /#ガウス分布の個数
51
+ #ガウス分布の個数
50
52
 
51
53
  self.n_component = n_component
52
54
 
53
55
 
54
56
 
55
- /#EMアルゴリズムを用いた最尤
57
+ #EMアルゴリズムを用いた最尤
56
58
 
57
59
  def fit(self,X,iter_max=10):
58
60
 
59
- /#データの次元
61
+ #データの次元
60
62
 
61
63
  self.ndim = np.size(X,1)
62
64
 
63
- /#混合係数の初期化
65
+ #混合係数の初期化
64
66
 
65
67
  self.weights = np.ones(self.n_component) / self.n_component
66
68
 
67
- /#平均の初期化
69
+ #平均の初期化
68
70
 
69
71
  self.means = np.random.uniform(X.min(),X.max(),(self.ndim,self.n_component))
70
72
 
71
- /#共分散行列の初期化
73
+ #共分散行列の初期化
72
74
 
73
75
  self.covs = np.repeat(10*np.eye(self.ndim),self.n_component).reshape(self.ndim,self.ndim,self.n_component)
74
76
 
75
- /#EステップのMステップを繰り返す
77
+ #EステップのMステップを繰り返す
76
78
 
77
79
  for i in range(iter_max):
78
80
 
79
81
  params = np.hstack((self.weights.ravel(), self.means.ravel(), self.covs.ravel()))
80
82
 
81
- /# Eステップ、負担率を計算
83
+ # Eステップ、負担率を計算
82
84
 
83
85
  resps = self.expectation(X)
84
86
 
85
- /# Mステップ、パラメータを更新
87
+ # Mステップ、パラメータを更新
86
88
 
87
89
  self.maximization(X, resps)
88
90
 
89
- /# パラメータが収束したかを確認
91
+ # パラメータが収束したかを確認
90
92
 
91
93
  if np.allclose(params, np.hstack((self.weights.ravel(), self.means.ravel(), self.covs.ravel()))):
92
94
 
@@ -98,7 +100,7 @@
98
100
 
99
101
 
100
102
 
101
- /# ガウス関数
103
+ # ガウス関数
102
104
 
103
105
  def gauss(self, X):
104
106
 
@@ -116,11 +118,11 @@
116
118
 
117
119
 
118
120
 
119
- /# Eステップ
121
+ # Eステップ
120
122
 
121
123
  def expectation(self, X):
122
124
 
123
- /# PRML式(9.23)
125
+ # PRML式(9.23)
124
126
 
125
127
  resps = self.weights * self.gauss(X)
126
128
 
@@ -130,23 +132,23 @@
130
132
 
131
133
 
132
134
 
133
- /# Mステップ
135
+ # Mステップ
134
136
 
135
137
  def maximization(self, X, resps):
136
138
 
137
- /# PRML式(9.27)
139
+ # PRML式(9.27)
138
140
 
139
141
  Nk = np.sum(resps, axis=0)
140
142
 
141
143
 
142
144
 
143
- /# PRML式(9.26)
145
+ # PRML式(9.26)
144
146
 
145
147
  self.weights = Nk / len(X)
146
148
 
147
149
 
148
150
 
149
- /# PRML式(9.24)
151
+ # PRML式(9.24)
150
152
 
151
153
  self.means = X.T.dot(resps) / Nk
152
154
 
@@ -154,17 +156,17 @@
154
156
 
155
157
  diffs = X[:, :, None] - self.means
156
158
 
157
- /# PRML式(9.25)
159
+ # PRML式(9.25)
158
160
 
159
161
  self.covs = np.einsum('nik,njk->ijk', diffs, diffs * np.expand_dims(resps, 1)) / Nk
160
162
 
161
163
 
162
164
 
163
- /# 確率分布p(x)を計算
165
+ # 確率分布p(x)を計算
164
166
 
165
167
  def predict_proba(self, X):
166
168
 
167
- /# PRML式(9.7)
169
+ # PRML式(9.7)
168
170
 
169
171
  gauss = self.weights * self.gauss(X)
170
172
 
@@ -172,7 +174,7 @@
172
174
 
173
175
 
174
176
 
175
- /# クラスタリング
177
+ # クラスタリング
176
178
 
177
179
  def classify(self, X):
178
180
 
@@ -221,3 +223,5 @@
221
223
  if __name__ == '__main__':
222
224
 
223
225
  main()
226
+
227
+ ```