回答編集履歴

5

d

2020/07/07 16:51

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
 
19
- 書籍のコードは GitHub に上がっているようなので、動かない場合はこちらのものと比較すると思います。
19
+ 書籍のコードは GitHub に上がっているようなので、動かない場合はこちらのものと比較するとよいかと思います。
20
20
 
21
21
 
22
22
 

4

d

2020/07/07 16:51

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -1,177 +1,23 @@
1
- > 決定境界を表直線せん(グラフを二つに分ける)
1
+ コピペミスだと思いますが、シグモイド関数の分母の指数が e^{-x} でなく、e^x になっいて、間違ってい
2
2
 
3
3
 
4
4
 
5
- その現象が再現しません。
5
+ ```diff
6
6
 
7
- (200, 2) の配列 X (200,) の配列 y を与えてロジスティクス回帰モデルで学習し、質問の関数に渡したら、意図通り描画されました。
7
+ - 1.0 / (1.0 + np.exp(np.clip(z, -250, 250)))
8
8
 
9
-
10
-
11
- ```python
12
-
13
- import matplotlib.pyplot as plt
14
-
15
- import numpy as np
16
-
17
- from matplotlib.colors import ListedColormap
18
-
19
- from sklearn.datasets import make_blobs
20
-
21
- from sklearn.linear_model import LogisticRegression
22
-
23
-
24
-
25
-
26
-
27
- class LogisticRegressionGD(object):
28
-
29
- def __init__(self, eta=0.05, n_iter=100, random_state=1):
30
-
31
- self.eta = eta
32
-
33
- self.n_iter = n_iter
34
-
35
- self.random_state = random_state
36
-
37
-
38
-
39
- def fit(self, X, y):
40
-
41
- rgen = np.random.RandomState(self.random_state)
42
-
43
- self.w_ = rgen.normal(loc=0.0, scale=0.01, size=1 + X.shape[1])
44
-
45
- self.cost_ = []
46
-
47
-
48
-
49
- for i in range(self.n_iter):
50
-
51
- net_input = self.net_input(X)
52
-
53
- output = self.activation(net_input)
54
-
55
- errors = y - output
56
-
57
- self.w_[1:] += self.eta * X.T.dot(errors)
58
-
59
- self.w_[0] += self.eta * errors.sum()
60
-
61
- cost = -y.dot(np.log(output)) - ((1 - y).dot(np.log(1 - output)))
62
-
63
- self.cost_.append(cost)
64
-
65
- return self
66
-
67
-
68
-
69
- def net_input(self, X):
70
-
71
- return np.dot(X, self.w_[1:]) + self.w_[0]
72
-
73
-
74
-
75
- def activation(self, z):
76
-
77
- return 1.0 / (1.0 + np.exp(-np.clip(z, -250, 250)))
9
+ + 1.0 / (1.0 + np.exp(-np.clip(z, -250, 250)))
78
-
79
-
80
-
81
- def predict(self, X):
82
-
83
- return np.where(self.net_input(X) >= 0.0, 1, 0)
84
-
85
-
86
-
87
-
88
-
89
- def plot_decision_regions(x, y, classifier, test_idx=None, resolution=0.02):
90
-
91
- markers = ("s", "x", "o", "^", "v")
92
-
93
- colors = ("blue", "red", "lightgreen", "gray", "cyan")
94
-
95
- cmap = ListedColormap(colors[: len(np.unique(y))])
96
-
97
-
98
-
99
- x1_min, x1_max = x[:, 0].min() - 1, x[:, 0].max() + 1
100
-
101
- x2_min, x2_max = x[:, 1].min() - 1, x[:, 1].max() + 1
102
-
103
-
104
-
105
- xx1, xx2 = np.meshgrid(
106
-
107
- np.arange(x1_min, x1_max, resolution), np.arange(x2_min, x2_max, resolution)
108
-
109
- )
110
-
111
-
112
-
113
- z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)
114
-
115
-
116
-
117
- z = z.reshape(xx1.shape)
118
-
119
- plt.contourf(xx1, xx2, z, alpha=0.8, cmap=cmap)
120
-
121
- plt.xlim(xx1.min(), xx1.max())
122
-
123
- plt.ylim(xx2.min(), xx2.max())
124
-
125
-
126
-
127
- for idx, c1 in enumerate(np.unique(y)):
128
-
129
- plt.scatter(
130
-
131
- x=x[y == c1, 0],
132
-
133
- y=x[y == c1, 1],
134
-
135
- alpha=0.8,
136
-
137
- c=colors[idx],
138
-
139
- marker=markers[idx],
140
-
141
- label=c1,
142
-
143
- edgecolor="black",
144
-
145
- )
146
-
147
-
148
-
149
-
150
-
151
- # データを作成する。
152
-
153
- X, y = make_blobs(
154
-
155
- random_state=0, n_samples=200, n_features=2, cluster_std=0.8, centers=2
156
-
157
- )
158
-
159
-
160
-
161
-
162
-
163
- # ロジスティック回帰モデルで学習する。
164
-
165
- model = LogisticRegressionGD(eta=0.05, n_iter=1000, random_state=1).fit(X, y)
166
-
167
- plot_decision_regions(X, y, model)
168
10
 
169
11
  ```
170
12
 
171
13
 
172
14
 
173
- ![イメージ説明](6b8febd777e2382cb6a353d0e82aebe7.jpeg)
15
+ ![イメージ説明](9da8000629acd92bb4066f7155375b9c.png)
174
16
 
175
17
 
176
18
 
177
- もし、記のようない場合は、現状図を質問欄に貼ってくださ
19
+ 書籍のコードは GitHub にがっているようなので、動かない場合はこちらものと比較すると思ます。
20
+
21
+
22
+
23
+ [python-machine-learning-book-2nd-edition/ch03.ipynb at master · rasbt/python-machine-learning-book-2nd-edition](https://github.com/rasbt/python-machine-learning-book-2nd-edition/blob/master/code/ch03/ch03.ipynb)

3

d

2020/07/07 16:49

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -14,19 +14,73 @@
14
14
 
15
15
  import numpy as np
16
16
 
17
+ from matplotlib.colors import ListedColormap
18
+
17
19
  from sklearn.datasets import make_blobs
18
20
 
19
21
  from sklearn.linear_model import LogisticRegression
20
22
 
21
23
 
22
24
 
23
- # データを作成する。
24
25
 
25
- X, y = make_blobs(
26
26
 
27
- random_state=0, n_samples=200, n_features=2, cluster_std=0.8, centers=2
27
+ class LogisticRegressionGD(object):
28
28
 
29
+ def __init__(self, eta=0.05, n_iter=100, random_state=1):
30
+
31
+ self.eta = eta
32
+
33
+ self.n_iter = n_iter
34
+
35
+ self.random_state = random_state
36
+
37
+
38
+
29
- )
39
+ def fit(self, X, y):
40
+
41
+ rgen = np.random.RandomState(self.random_state)
42
+
43
+ self.w_ = rgen.normal(loc=0.0, scale=0.01, size=1 + X.shape[1])
44
+
45
+ self.cost_ = []
46
+
47
+
48
+
49
+ for i in range(self.n_iter):
50
+
51
+ net_input = self.net_input(X)
52
+
53
+ output = self.activation(net_input)
54
+
55
+ errors = y - output
56
+
57
+ self.w_[1:] += self.eta * X.T.dot(errors)
58
+
59
+ self.w_[0] += self.eta * errors.sum()
60
+
61
+ cost = -y.dot(np.log(output)) - ((1 - y).dot(np.log(1 - output)))
62
+
63
+ self.cost_.append(cost)
64
+
65
+ return self
66
+
67
+
68
+
69
+ def net_input(self, X):
70
+
71
+ return np.dot(X, self.w_[1:]) + self.w_[0]
72
+
73
+
74
+
75
+ def activation(self, z):
76
+
77
+ return 1.0 / (1.0 + np.exp(-np.clip(z, -250, 250)))
78
+
79
+
80
+
81
+ def predict(self, X):
82
+
83
+ return np.where(self.net_input(X) >= 0.0, 1, 0)
30
84
 
31
85
 
32
86
 
@@ -94,9 +148,21 @@
94
148
 
95
149
 
96
150
 
151
+ # データを作成する。
152
+
153
+ X, y = make_blobs(
154
+
155
+ random_state=0, n_samples=200, n_features=2, cluster_std=0.8, centers=2
156
+
157
+ )
158
+
159
+
160
+
161
+
162
+
97
163
  # ロジスティック回帰モデルで学習する。
98
164
 
99
- model = LogisticRegression(solver="lbfgs", multi_class="multinomial").fit(X, y)
165
+ model = LogisticRegressionGD(eta=0.05, n_iter=1000, random_state=1).fit(X, y)
100
166
 
101
167
  plot_decision_regions(X, y, model)
102
168
 

2

d

2020/07/07 16:22

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -13,10 +13,6 @@
13
13
  import matplotlib.pyplot as plt
14
14
 
15
15
  import numpy as np
16
-
17
- from matplotlib.colors import ListedColormap
18
-
19
- from sklearn import datasets
20
16
 
21
17
  from sklearn.datasets import make_blobs
22
18
 

1

d

2020/07/07 16:00

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -109,3 +109,7 @@
109
109
 
110
110
 
111
111
  ![イメージ説明](6b8febd777e2382cb6a353d0e82aebe7.jpeg)
112
+
113
+
114
+
115
+ もし、上記のようにならない場合は、現状の図を質問欄に貼ってください