質問編集履歴
3
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -358,7 +358,7 @@
|
|
358
358
|
|
359
359
|
#予測結果を出力
|
360
360
|
|
361
|
-
print("次の当選番号の予測は: {}".format(e[round(next_prediction[0][0])]))
|
361
|
+
print("次の当選番号の予測は: {}".format(e[np.round(next_prediction[0][0])]))
|
362
362
|
|
363
363
|
|
364
364
|
|
2
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,25 +2,17 @@
|
|
2
2
|
|
3
3
|
参考資料は[こちら](https://www.microstone.info/ai技術で宝くじ当選番号を予測、億万長者の夢を実/)
|
4
4
|
|
5
|
-
下記のコードを実行するとこうなりました。
|
6
|
-
|
7
5
|
(実行時は時間短縮のためself.epochsを1にしています。)
|
8
6
|
|
9
|
-
|
7
|
+
|
10
|
-
|
11
|
-
|
8
|
+
|
12
|
-
|
13
|
-
次の当選番号の予測は: 3767366844416
|
14
|
-
|
15
|
-
Time: 41.3sec
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
9
|
+
整理整頓しました。
|
10
|
+
|
11
|
+
|
12
|
+
|
20
|
-
|
13
|
+
質問
|
14
|
+
|
21
|
-
|
15
|
+
個人的にパラメータの部分がよくわからないのですが、コメントのような理解でよろしいでしょうか?self.units = 6これについては何の意味があるのか 単位?単位が6?
|
22
|
-
|
23
|
-
また、本来ロト7の最大数値は37までなのですが、3767366844416 こちらをどこで区切ってもとてつもない数字になってしまいます。例えば 3,76,73 や 37,67,36のように 37以上表示されていると思いますがこれはおかしいですよね。機械学習、深層学習ってそういうものなんですか?
|
24
16
|
|
25
17
|
|
26
18
|
|
@@ -28,24 +20,6 @@
|
|
28
20
|
|
29
21
|
|
30
22
|
|
31
|
-
もう一つ解決方法として思いついたのが
|
32
|
-
|
33
|
-
現在第1~第7までの数値を一つに合体しているため、第1数字が一桁の場合、合体すると13桁の場合もあれば14桁の場合もあります。
|
34
|
-
|
35
|
-
そこで、csvをロードしたときに、一桁の数字があれば、頭に0をつけるようにプログラムすれば全てが14桁になり、カンマ区切りで区別しなくともわかるようになると思います。
|
36
|
-
|
37
|
-
”csvを読み込んだ後に頭に一桁があれば0をつける”
|
38
|
-
|
39
|
-
こちらをプログラムで行うにはどのようにすればいいのでしょうか。
|
40
|
-
|
41
|
-
excelで行う方法はいくつかありましたが、プログラムはわかりませんでした。
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
個人的にパラメータの部分がよくわからないのですが、コメントのような理解でよろしいでしょうか?self.units = 6これについては何の意味があるのか 単位?単位が6?
|
48
|
-
|
49
23
|
|
50
24
|
|
51
25
|
```python
|
@@ -60,6 +34,8 @@
|
|
60
34
|
|
61
35
|
#time 時刻に関するさまざまな関数を提供
|
62
36
|
|
37
|
+
#itertools 効率的なループ実行のためのイテレータ生成関数
|
38
|
+
|
63
39
|
#sklearn 機械学習ライブラリ
|
64
40
|
|
65
41
|
#preprocessing 前処理用のライブラリ
|
@@ -72,6 +48,8 @@
|
|
72
48
|
|
73
49
|
import time
|
74
50
|
|
51
|
+
import itertools
|
52
|
+
|
75
53
|
from sklearn import preprocessing
|
76
54
|
|
77
55
|
|
@@ -88,7 +66,7 @@
|
|
88
66
|
|
89
67
|
#steps_of_history いくつ先のデータを予測するか
|
90
68
|
|
91
|
-
|
69
|
+
#units よくわからない
|
92
70
|
|
93
71
|
#epochs 一つの訓練データを何回繰り返して学習させるか
|
94
72
|
|
@@ -100,13 +78,13 @@
|
|
100
78
|
|
101
79
|
self.units = 6
|
102
80
|
|
103
|
-
self.epochs = 1
|
81
|
+
self.epochs = 1
|
104
82
|
|
105
83
|
self.batch_size = 1
|
106
84
|
|
107
85
|
|
108
86
|
|
109
|
-
#データセット作成
|
87
|
+
#データセット作成
|
110
88
|
|
111
89
|
def create_dataset(self,data):
|
112
90
|
|
@@ -128,7 +106,7 @@
|
|
128
106
|
|
129
107
|
|
130
108
|
|
131
|
-
#予測データ作成
|
109
|
+
#予測データ作成
|
132
110
|
|
133
111
|
def create_predict_dataset(self,data):
|
134
112
|
|
@@ -242,23 +220,47 @@
|
|
242
220
|
|
243
221
|
|
244
222
|
|
245
|
-
#
|
223
|
+
#1~37までの数字を用意
|
246
|
-
|
224
|
+
|
247
|
-
|
225
|
+
a = {m for m in range(1,38)}
|
226
|
+
|
227
|
+
d = {tuple(p): i for i, p in enumerate(itertools.combinations(a,7))}
|
228
|
+
|
229
|
+
e = {v: k for k, v in d.items()}
|
230
|
+
|
231
|
+
|
248
232
|
|
249
233
|
dataframe = pd.read_csv("./loto7.csv",encoding='cp932')
|
250
234
|
|
251
235
|
dataframe = dataframe[["第1数字","第2数字","第3数字","第4数字","第5数字","第6数字","第7数字"]]
|
252
236
|
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
237
|
+
data = dataframe.index.map(
|
238
|
+
|
239
|
+
lambda _:d[ tuple(sorted(
|
240
|
+
|
241
|
+
[(dataframe.第1数字[_]),
|
242
|
+
|
243
|
+
(dataframe.第2数字[_]),
|
244
|
+
|
245
|
+
(dataframe.第3数字[_]),
|
246
|
+
|
247
|
+
(dataframe.第4数字[_]),
|
248
|
+
|
249
|
+
(dataframe.第5数字[_]),
|
250
|
+
|
251
|
+
(dataframe.第6数字[_]),
|
252
|
+
|
253
|
+
(dataframe.第7数字[_])
|
254
|
+
|
255
|
+
]
|
256
|
+
|
257
|
+
))
|
258
|
+
|
259
|
+
]
|
260
|
+
|
261
|
+
)
|
262
|
+
|
263
|
+
data = data.values.reshape(data.shape[0], 1).astype(dtype=np.float32)
|
262
264
|
|
263
265
|
|
264
266
|
|
@@ -346,7 +348,7 @@
|
|
346
348
|
|
347
349
|
#次の予測に訓練データをlatest_xを用いて行う
|
348
350
|
|
349
|
-
#
|
351
|
+
#予測に正規化のinverse_transformを”次の予測”を用いて行う
|
350
352
|
|
351
353
|
latest_x = lstm.create_predict_dataset(data)
|
352
354
|
|
@@ -354,12 +356,14 @@
|
|
354
356
|
|
355
357
|
next_prediction = scaler.inverse_transform(next_prediction)
|
356
358
|
|
359
|
+
#予測結果を出力
|
360
|
+
|
357
|
-
print("次の当選番号の予測は: {
|
361
|
+
print("次の当選番号の予測は: {}".format(e[round(next_prediction[0][0])]))
|
358
|
-
|
359
|
-
|
360
|
-
|
362
|
+
|
363
|
+
|
364
|
+
|
361
|
-
#
|
365
|
+
#測定時間を出力
|
362
|
-
|
366
|
+
|
363
|
-
print("
|
367
|
+
print("時間: {0:.1f}sec".format(time.time() - START_TIME))
|
364
368
|
|
365
369
|
```
|
1
追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -28,6 +28,20 @@
|
|
28
28
|
|
29
29
|
|
30
30
|
|
31
|
+
もう一つ解決方法として思いついたのが
|
32
|
+
|
33
|
+
現在第1~第7までの数値を一つに合体しているため、第1数字が一桁の場合、合体すると13桁の場合もあれば14桁の場合もあります。
|
34
|
+
|
35
|
+
そこで、csvをロードしたときに、一桁の数字があれば、頭に0をつけるようにプログラムすれば全てが14桁になり、カンマ区切りで区別しなくともわかるようになると思います。
|
36
|
+
|
37
|
+
”csvを読み込んだ後に頭に一桁があれば0をつける”
|
38
|
+
|
39
|
+
こちらをプログラムで行うにはどのようにすればいいのでしょうか。
|
40
|
+
|
41
|
+
excelで行う方法はいくつかありましたが、プログラムはわかりませんでした。
|
42
|
+
|
43
|
+
|
44
|
+
|
31
45
|
|
32
46
|
|
33
47
|
個人的にパラメータの部分がよくわからないのですが、コメントのような理解でよろしいでしょうか?self.units = 6これについては何の意味があるのか 単位?単位が6?
|