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

質問編集履歴

4

コードを```で囲った

2019/11/20 05:49

投稿

tska
tska

スコア13

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

3

誤字の修正

2019/11/20 05:49

投稿

tska
tska

スコア13

title CHANGED
File without changes
body CHANGED
@@ -91,7 +91,7 @@
91
91
  joint_prob = self.weights * self.gauss(X)
92
92
  return np.argmax(joint_prob, axis=1)
93
93
 
94
- /# MNISTデータセットを実装
94
+ # MNISTデータセットを実装
95
95
  def main():
96
96
  X = x_0or1
97
97
 

2

誤字の修正

2019/11/20 04:01

投稿

tska
tska

スコア13

title CHANGED
File without changes
body CHANGED
@@ -2,7 +2,7 @@
2
2
  Jupyter notebookでpythonを書いたところ、エラーメッセージで(34, 'Result too large')と表示され、オーバーフローによるエラーとわかったのですが、対処方法がわかりません。
3
3
  よろしくお願いいたします。
4
4
 
5
- 以下コードです。なお、文字拡大を防ぐためにここでは#の前に/を入れています。
5
+ 以下コードです。
6
6
 
7
7
  ```
8
8
  #MNISTデータセットをダウンロード

1

コードを```で囲った

2019/11/20 04:00

投稿

tska
tska

スコア13

title CHANGED
File without changes
body CHANGED
@@ -4,7 +4,8 @@
4
4
 
5
5
  以下コードです。なお、文字拡大を防ぐためにここでは#の前に/を入れています。
6
6
 
7
+ ```
7
- /#MNISTデータセットをダウンロード
8
+ #MNISTデータセットをダウンロード
8
9
  import numpy as np
9
10
  from sklearn import datasets
10
11
  from sklearn.preprocessing import StandardScaler
@@ -13,42 +14,42 @@
13
14
  from sklearn.datasets import fetch_mldata
14
15
  mnist = fetch_mldata('MNIST original')
15
16
 
16
- /#MNISTの1~255の数字を1にする
17
+ #MNISTの1~255の数字を1にする
17
18
  _, mnist.data, _, y = train_test_split(mnist.data, y,test_size=0.29)
18
19
  mnist_np = np.array(mnist.data)
19
20
  x_0or1 = np.where(mnist_np >= 1,1, 0)
20
21
 
21
- /#アルゴリズムの設定
22
+ #アルゴリズムの設定
22
23
  class GaussianMixture(object):
23
24
 
24
- def _init_(self,n_component):
25
+ def __init__(self,n_component):
25
- /#ガウス分布の個数
26
+ #ガウス分布の個数
26
27
  self.n_component = n_component
27
28
 
28
- /#EMアルゴリズムを用いた最尤
29
+ #EMアルゴリズムを用いた最尤
29
30
  def fit(self,X,iter_max=10):
30
- /#データの次元
31
+ #データの次元
31
32
  self.ndim = np.size(X,1)
32
- /#混合係数の初期化
33
+ #混合係数の初期化
33
34
  self.weights = np.ones(self.n_component) / self.n_component
34
- /#平均の初期化
35
+ #平均の初期化
35
36
  self.means = np.random.uniform(X.min(),X.max(),(self.ndim,self.n_component))
36
- /#共分散行列の初期化
37
+ #共分散行列の初期化
37
38
  self.covs = np.repeat(10*np.eye(self.ndim),self.n_component).reshape(self.ndim,self.ndim,self.n_component)
38
- /#EステップのMステップを繰り返す
39
+ #EステップのMステップを繰り返す
39
40
  for i in range(iter_max):
40
41
  params = np.hstack((self.weights.ravel(), self.means.ravel(), self.covs.ravel()))
41
- /# Eステップ、負担率を計算
42
+ # Eステップ、負担率を計算
42
43
  resps = self.expectation(X)
43
- /# Mステップ、パラメータを更新
44
+ # Mステップ、パラメータを更新
44
45
  self.maximization(X, resps)
45
- /# パラメータが収束したかを確認
46
+ # パラメータが収束したかを確認
46
47
  if np.allclose(params, np.hstack((self.weights.ravel(), self.means.ravel(), self.covs.ravel()))):
47
48
  break
48
49
  else:
49
50
  print("parameters may not have converged")
50
51
 
51
- /# ガウス関数
52
+ # ガウス関数
52
53
  def gauss(self, X):
53
54
  precisions = np.linalg.inv(self.covs.T).T
54
55
  diffs = X[:, :, None] - self.means
@@ -57,35 +58,35 @@
57
58
  assert exponents.shape == (len(X), self.n_component)
58
59
  return np.exp(-0.5 * exponents) / np.sqrt(np.linalg.det(self.covs.T).T * (2 * np.pi) ** self.ndim)
59
60
 
60
- /# Eステップ
61
+ # Eステップ
61
62
  def expectation(self, X):
62
- /# PRML式(9.23)
63
+ # PRML式(9.23)
63
64
  resps = self.weights * self.gauss(X)
64
65
  resps /= resps.sum(axis=-1, keepdims=True)
65
66
  return resps
66
67
 
67
- /# Mステップ
68
+ # Mステップ
68
69
  def maximization(self, X, resps):
69
- /# PRML式(9.27)
70
+ # PRML式(9.27)
70
71
  Nk = np.sum(resps, axis=0)
71
72
 
72
- /# PRML式(9.26)
73
+ # PRML式(9.26)
73
74
  self.weights = Nk / len(X)
74
75
 
75
- /# PRML式(9.24)
76
+ # PRML式(9.24)
76
77
  self.means = X.T.dot(resps) / Nk
77
78
 
78
79
  diffs = X[:, :, None] - self.means
79
- /# PRML式(9.25)
80
+ # PRML式(9.25)
80
81
  self.covs = np.einsum('nik,njk->ijk', diffs, diffs * np.expand_dims(resps, 1)) / Nk
81
82
 
82
- /# 確率分布p(x)を計算
83
+ # 確率分布p(x)を計算
83
84
  def predict_proba(self, X):
84
- /# PRML式(9.7)
85
+ # PRML式(9.7)
85
86
  gauss = self.weights * self.gauss(X)
86
87
  return np.sum(gauss, axis=-1)
87
88
 
88
- /# クラスタリング
89
+ # クラスタリング
89
90
  def classify(self, X):
90
91
  joint_prob = self.weights * self.gauss(X)
91
92
  return np.argmax(joint_prob, axis=1)
@@ -109,4 +110,5 @@
109
110
  plt.show()
110
111
 
111
112
  if __name__ == '__main__':
112
- main()
113
+ main()
114
+ ```