質問編集履歴

3

修正

2020/09/29 05:19

投稿

EDM
EDM

スコア30

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

修正

2020/09/29 05:18

投稿

EDM
EDM

スコア30

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
- Train Score: 0.223 RMSE
7
+
10
-
11
- Test Score: 0.216 RMSE
8
+
12
-
13
- 次の当選番号の予測は: 3767366844416
14
-
15
- Time: 41.3sec
16
-
17
-
18
-
19
- 質問内容とては
9
+ 整理整頓ました。
10
+
11
+
12
+
20
-
13
+ 質問
14
+
21
- 当選番号表示を第1数字,第2数字...とカンマ区切りで表示させたいのですが、うまくきません。データを一次元配列化るからきないのでしょうか?
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 = 100
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
- #csvファイルの第1数字から第7数字だけを読み込む
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
- #データを一次元配列化 データタイプはfloat32
258
-
259
- data = dataframe.index.map(lambda _:int(str(dataframe.第1数字[_]) + str(dataframe.第2数字[_]) + str(dataframe.第3数字[_]) + str(dataframe.第4数字[_]) + str(dataframe.第5数字[_]) + str(dataframe.第6数字[_]) + str(dataframe.第7数字[_])))
260
-
261
- data = data.values.reshape(data.shape[0],1).astype(dtype = np.float32)
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
- #次の予測に正規化のinverse_transformを”次の予測”を用いて行う
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("次の当選番号の予測は: {0:.0f}".format((next_prediction)[0][0]))
361
+ print("次の当選番号の予測は: {}".format(e[round(next_prediction[0][0])]))
358
-
359
-
360
-
362
+
363
+
364
+
361
- #経過時間?の測定結果を出力
365
+ #測定時間を出力
362
-
366
+
363
- print("Time: {0:.1f}sec".format(time.time() - START_TIME))
367
+ print("時間: {0:.1f}sec".format(time.time() - START_TIME))
364
368
 
365
369
  ```

1

追加

2020/09/28 08:28

投稿

EDM
EDM

スコア30

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?