回答編集履歴
16
「銀行家の丸め」にならないように修正
answer
CHANGED
@@ -77,7 +77,11 @@
|
|
77
77
|
単純に次のようにすればよいと思います。
|
78
78
|
|
79
79
|
```
|
80
|
+
from decimal import Decimal, ROUND_HALF_UP
|
81
|
+
n0 = next_prediction[0][0]
|
82
|
+
n1 = Decimal(str(n0))
|
83
|
+
n2 = n1.quantize(Decimal('0'), rounding=ROUND_HALF_UP)
|
80
|
-
print("次の当選番号の予測は: {}".format(e[
|
84
|
+
print("次の当選番号の予測は: {}".format(e[n2]))
|
81
85
|
```
|
82
86
|
※私は数学に詳しくないので、このアプローチが本当に正しい答えを導くかどうかについては保証しません。
|
83
87
|
あくまでコピペ元のプログラムのアプローチを生かす形での、正しそうな答えを導くためのショートカットを示しただけです。
|
15
f
answer
CHANGED
@@ -74,10 +74,10 @@
|
|
74
74
|
~~戻し方を明かしちゃうと勉強にならないので、明日までに考えてみてください。~~
|
75
75
|
|
76
76
|
next_prediction[0][0]は予測されたインデックスを表しているのですから、
|
77
|
-
単純に次のようにすればよい
|
77
|
+
単純に次のようにすればよいと思います。
|
78
78
|
|
79
79
|
```
|
80
|
-
print("次の当選番号の予測は: {}".format(e[
|
80
|
+
print("次の当選番号の予測は: {}".format(e[round(next_prediction[0][0])]))
|
81
81
|
```
|
82
82
|
※私は数学に詳しくないので、このアプローチが本当に正しい答えを導くかどうかについては保証しません。
|
83
83
|
あくまでコピペ元のプログラムのアプローチを生かす形での、正しそうな答えを導くためのショートカットを示しただけです。
|
14
回答篇
answer
CHANGED
@@ -71,8 +71,14 @@
|
|
71
71
|
```
|
72
72
|
で、あとは出てきたnext_prediction(上で言えば「5597193.5」)を、求めるべきこたえに戻せばよい。
|
73
73
|
|
74
|
-
戻し方を明かしちゃうと勉強にならないので、
|
74
|
+
~~戻し方を明かしちゃうと勉強にならないので、明日までに考えてみてください。~~
|
75
75
|
|
76
|
+
next_prediction[0][0]は予測されたインデックスを表しているのですから、
|
77
|
+
単純に次のようにすればよいです。
|
78
|
+
|
79
|
+
```
|
80
|
+
print("次の当選番号の予測は: {}".format(e[int(next_prediction[0][0])]))
|
81
|
+
```
|
76
82
|
※私は数学に詳しくないので、このアプローチが本当に正しい答えを導くかどうかについては保証しません。
|
77
83
|
あくまでコピペ元のプログラムのアプローチを生かす形での、正しそうな答えを導くためのショートカットを示しただけです。
|
78
84
|
(組み合わせをマッピングしたインデックスのトレンドが、組み合わせの予測に使えるかといわれれば、大いに疑問)
|
13
x
answer
CHANGED
@@ -75,4 +75,5 @@
|
|
75
75
|
|
76
76
|
※私は数学に詳しくないので、このアプローチが本当に正しい答えを導くかどうかについては保証しません。
|
77
77
|
あくまでコピペ元のプログラムのアプローチを生かす形での、正しそうな答えを導くためのショートカットを示しただけです。
|
78
|
+
(組み合わせをマッピングしたインデックスのトレンドが、組み合わせの予測に使えるかといわれれば、大いに疑問)
|
78
79
|
たぶん、各数字の出現頻度等を考慮した、もっとまっすぐなアプローチをご存知の方がいるはず。
|
12
x
answer
CHANGED
@@ -74,5 +74,5 @@
|
|
74
74
|
戻し方を明かしちゃうと勉強にならないので、~~明日までに~~考えてみてください。
|
75
75
|
|
76
76
|
※私は数学に詳しくないので、このアプローチが本当に正しい答えを導くかどうかについては保証しません。
|
77
|
-
あくまで
|
77
|
+
あくまでコピペ元のプログラムのアプローチを生かす形での、正しそうな答えを導くためのショートカットを示しただけです。
|
78
|
-
たぶんもっとまっすぐなアプローチをご存知の方がいるはず。
|
78
|
+
たぶん、各数字の出現頻度等を考慮した、もっとまっすぐなアプローチをご存知の方がいるはず。
|
11
f
answer
CHANGED
@@ -33,8 +33,9 @@
|
|
33
33
|
```
|
34
34
|
import itertools
|
35
35
|
a = [m for m in range(37)]
|
36
|
+
#1〜37の数字の組み合わせパターンを登録
|
36
|
-
d = {tuple(p):i for i, p in enumerate(itertools.combinations(a, 7))}
|
37
|
+
d = {tuple(p): i for i, p in enumerate(itertools.combinations(a, 7))}
|
37
|
-
e = {v:k for k, v in d.items()}
|
38
|
+
e = {v: k for k, v in d.items()}
|
38
39
|
|
39
40
|
#パターンをキーとしてインデックスをマッピングする。
|
40
41
|
data = dataframe.index.map(
|
10
順列→組み合わせに修正
answer
CHANGED
@@ -31,20 +31,23 @@
|
|
31
31
|
|
32
32
|
そこで、ロト7の全パターンを、10進数に線形にあてはめた数字をデータとして投入する、というやり方になるかもしれませんね。
|
33
33
|
```
|
34
|
-
|
35
34
|
import itertools
|
36
35
|
a = [m for m in range(37)]
|
37
|
-
d = {tuple(p):i for i, p in enumerate(itertools.
|
36
|
+
d = {tuple(p):i for i, p in enumerate(itertools.combinations(a, 7))}
|
37
|
+
e = {v:k for k, v in d.items()}
|
38
|
+
|
38
39
|
#パターンをキーとしてインデックスをマッピングする。
|
39
40
|
data = dataframe.index.map(
|
40
|
-
lambda _:d[
|
41
|
+
lambda _:d[ tuple(sorted(
|
41
|
-
|
42
|
+
[(dataframe.第1数字[_])-1 ,
|
42
43
|
(dataframe.第2数字[_])-1 ,
|
43
44
|
(dataframe.第3数字[_])-1 ,
|
44
45
|
(dataframe.第4数字[_])-1 ,
|
45
46
|
(dataframe.第5数字[_])-1 ,
|
46
47
|
(dataframe.第6数字[_])-1 ,
|
47
48
|
(dataframe.第7数字[_])-1
|
49
|
+
]
|
50
|
+
))
|
48
51
|
]
|
49
52
|
)
|
50
53
|
```
|
@@ -62,10 +65,10 @@
|
|
62
65
|
--
|
63
66
|
Train Score: 0.216 RMSE
|
64
67
|
Test Score: 0.187 RMSE
|
65
|
-
次の当選番号の予測は:
|
68
|
+
次の当選番号の予測は: 5597193.5
|
66
69
|
Time: 3.3sec
|
67
70
|
```
|
68
|
-
で、あとは出てきた
|
71
|
+
で、あとは出てきたnext_prediction(上で言えば「5597193.5」)を、求めるべきこたえに戻せばよい。
|
69
72
|
|
70
73
|
戻し方を明かしちゃうと勉強にならないので、~~明日までに~~考えてみてください。
|
71
74
|
|
9
s
answer
CHANGED
@@ -34,7 +34,7 @@
|
|
34
34
|
|
35
35
|
import itertools
|
36
36
|
a = [m for m in range(37)]
|
37
|
-
d = {tuple(p):i for i, p in itertools.permutations(a, 7)}
|
37
|
+
d = {tuple(p):i for i, p in enumerate(itertools.permutations(a, 7))}
|
38
38
|
#パターンをキーとしてインデックスをマッピングする。
|
39
39
|
data = dataframe.index.map(
|
40
40
|
lambda _:d[
|
8
c
answer
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
イメージしやすい言い方をすれば、**000から999の数字が書かれた「1000面体のサイコロ」を振って出た目の過去の記録を分析して、次に振って出る目を予測している**のです。(実際は実数で計算しているので語弊はありますが)
|
24
24
|
|
25
|
-
一方、LOTO7は
|
25
|
+
一方、LOTO7は1から37までの数字を7つ、重複なしに選択するものです。
|
26
26
|
|
27
27
|
したがって、仮に上記のように2桁で区切ってデータを与えても、
|
28
28
|
**内部では、(データによるが)最大で37363534333231までの数が書かれたサイコロを仮定して出る目を予測することになってしまい、
|
@@ -35,7 +35,7 @@
|
|
35
35
|
import itertools
|
36
36
|
a = [m for m in range(37)]
|
37
37
|
d = {tuple(p):i for i, p in itertools.permutations(a, 7)}
|
38
|
-
|
38
|
+
#パターンをキーとしてインデックスをマッピングする。
|
39
39
|
data = dataframe.index.map(
|
40
40
|
lambda _:d[
|
41
41
|
(dataframe.第1数字[_])-1 ,
|
7
k
answer
CHANGED
@@ -25,8 +25,8 @@
|
|
25
25
|
一方、LOTO7は37までの数字を使用しています。
|
26
26
|
|
27
27
|
したがって、仮に上記のように2桁で区切ってデータを与えても、
|
28
|
-
**内部では
|
28
|
+
**内部では、(データによるが)最大で37363534333231までの数が書かれたサイコロを仮定して出る目を予測することになってしまい、
|
29
|
-
|
29
|
+
実際に存在するパターン以外のパターンまで計算に使う可能性がある**ため、
|
30
30
|
正しそうな答えを導くことはできないのではないでしょうか。
|
31
31
|
|
32
32
|
そこで、ロト7の全パターンを、10進数に線形にあてはめた数字をデータとして投入する、というやり方になるかもしれませんね。
|
6
f
answer
CHANGED
@@ -25,23 +25,27 @@
|
|
25
25
|
一方、LOTO7は37までの数字を使用しています。
|
26
26
|
|
27
27
|
したがって、仮に上記のように2桁で区切ってデータを与えても、
|
28
|
-
**内部では
|
28
|
+
**内部では10,295,472までの数が書かれたサイコロを仮定して出る目を予測することになり、
|
29
29
|
考えるべきパターンを取りこぼしてしまう**ため、
|
30
30
|
正しそうな答えを導くことはできないのではないでしょうか。
|
31
31
|
|
32
|
-
そこで、出来る限り同じアプローチ(プログラムを変えずにやるという意味で)でやるという前提に立てば
|
33
|
-
|
32
|
+
そこで、ロト7の全パターンを、10進数に線形にあてはめた数字をデータとして投入する、というやり方になるかもしれませんね。
|
34
33
|
```
|
34
|
+
|
35
|
+
import itertools
|
36
|
+
a = [m for m in range(37)]
|
37
|
+
d = {tuple(p):i for i, p in itertools.permutations(a, 7)}
|
38
|
+
|
35
39
|
data = dataframe.index.map(
|
36
|
-
lambda _:
|
40
|
+
lambda _:d[
|
37
|
-
(dataframe.第1数字[_]-1
|
41
|
+
(dataframe.第1数字[_])-1 ,
|
38
|
-
(dataframe.第2数字[_]-1
|
42
|
+
(dataframe.第2数字[_])-1 ,
|
39
|
-
(dataframe.第3数字[_]-1
|
43
|
+
(dataframe.第3数字[_])-1 ,
|
40
|
-
(dataframe.第4数字[_]-1
|
44
|
+
(dataframe.第4数字[_])-1 ,
|
41
|
-
(dataframe.第5数字[_]-1
|
45
|
+
(dataframe.第5数字[_])-1 ,
|
42
|
-
(dataframe.第6数字[_]-1
|
46
|
+
(dataframe.第6数字[_])-1 ,
|
43
|
-
(dataframe.第7数字[_]-1
|
47
|
+
(dataframe.第7数字[_])-1
|
44
|
-
|
48
|
+
]
|
45
49
|
)
|
46
50
|
```
|
47
51
|
|
5
j
answer
CHANGED
@@ -18,21 +18,17 @@
|
|
18
18
|
元のプログラムは、3つの数字データを元に予測するものですが、
|
19
19
|
日本で発売されている数字選択式全国自治宝くじのひとつである「NUMBERS3」が使う各数字が
|
20
20
|
0〜9で成り立っていることを奇貨として、
|
21
|
-
3つの数を10進法で最大3桁となる整数yに変換し、各時点xに対するy
|
21
|
+
3つの数を10進法で最大3桁となる整数yに変換し、各時点xに対するyを線形にプロットしたグラフを分析・予測するものです。
|
22
22
|
|
23
|
-
イメージしやすい言い方をすれば、**000から999の数字が書かれた「1000面体のサイコロ」を振って出た目の過去の記録を分析して、次に振って出る目を予測している**のです。
|
23
|
+
イメージしやすい言い方をすれば、**000から999の数字が書かれた「1000面体のサイコロ」を振って出た目の過去の記録を分析して、次に振って出る目を予測している**のです。(実際は実数で計算しているので語弊はありますが)
|
24
24
|
|
25
25
|
一方、LOTO7は37までの数字を使用しています。
|
26
26
|
|
27
27
|
したがって、仮に上記のように2桁で区切ってデータを与えても、
|
28
|
-
**内部では
|
28
|
+
**内部では37373737373737までの数が書かれたサイコロを仮定して出る目を予測することになり、
|
29
|
-
|
29
|
+
考えるべきパターンを取りこぼしてしまう**ため、
|
30
|
-
正しそうな答えを導くことはでき
|
30
|
+
正しそうな答えを導くことはできないのではないでしょうか。
|
31
|
-
(元となるデータに38以上の数字が含まれていなくとも、予測計算段階でその前提が崩れる)
|
32
31
|
|
33
|
-
一見いいアイデアだと思ったのに。。。残念!
|
34
|
-
|
35
|
-
|
36
32
|
そこで、出来る限り同じアプローチ(プログラムを変えずにやるという意味で)でやるという前提に立てば
|
37
33
|
下記のように7桁の37進法の数字を、10進数に線形にあてはめた数字をデータとして投入する、というやり方になるかもしれませんね。
|
38
34
|
```
|
4
f
answer
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
元のプログラムは、3つの数字データを元に予測するものですが、
|
19
19
|
日本で発売されている数字選択式全国自治宝くじのひとつである「NUMBERS3」が使う各数字が
|
20
20
|
0〜9で成り立っていることを奇貨として、
|
21
|
-
3つの数
|
21
|
+
3つの数を10進法で最大3桁となる整数yに変換し、各時点xに対するyの動きを分析・予測するものです。
|
22
22
|
|
23
23
|
イメージしやすい言い方をすれば、**000から999の数字が書かれた「1000面体のサイコロ」を振って出た目の過去の記録を分析して、次に振って出る目を予測している**のです。
|
24
24
|
|
3
f
answer
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
|
17
17
|
|
18
18
|
元のプログラムは、3つの数字データを元に予測するものですが、
|
19
|
-
日本で発売されている数字選択式全国自治宝くじのひとつである「
|
19
|
+
日本で発売されている数字選択式全国自治宝くじのひとつである「NUMBERS3」が使う各数字が
|
20
20
|
0〜9で成り立っていることを奇貨として、
|
21
21
|
3つの数字を3桁の数字yに変換し、各時点xに対する3桁の数字yの動きを分析・予測するものです。
|
22
22
|
|
2
c
answer
CHANGED
@@ -41,7 +41,7 @@
|
|
41
41
|
(dataframe.第1数字[_]-1)*(37**0) +
|
42
42
|
(dataframe.第2数字[_]-1)*(37**1) +
|
43
43
|
(dataframe.第3数字[_]-1)*(37**2) +
|
44
|
-
(dataframe.第4数字[_]-1)*(37**3)+
|
44
|
+
(dataframe.第4数字[_]-1)*(37**3) +
|
45
45
|
(dataframe.第5数字[_]-1)*(37**4) +
|
46
46
|
(dataframe.第6数字[_]-1)*(37**5) +
|
47
47
|
(dataframe.第7数字[_]-1)*(37**6)
|
1
c
answer
CHANGED
@@ -38,13 +38,13 @@
|
|
38
38
|
```
|
39
39
|
data = dataframe.index.map(
|
40
40
|
lambda _:int(
|
41
|
-
(dataframe.第1数字[_]-1)*37**0 +
|
41
|
+
(dataframe.第1数字[_]-1)*(37**0) +
|
42
|
-
(dataframe.第2数字[_]-1)*37**1 +
|
42
|
+
(dataframe.第2数字[_]-1)*(37**1) +
|
43
|
-
(dataframe.第3数字[_]-1)*37**2 +
|
43
|
+
(dataframe.第3数字[_]-1)*(37**2) +
|
44
|
-
(dataframe.第4数字[_]-1)*37**3
|
44
|
+
(dataframe.第4数字[_]-1)*(37**3)+
|
45
|
-
(dataframe.第5数字[_]-1)*37**4 +
|
45
|
+
(dataframe.第5数字[_]-1)*(37**4) +
|
46
|
-
(dataframe.第6数字[_]-1)*37**5 +
|
46
|
+
(dataframe.第6数字[_]-1)*(37**5) +
|
47
|
-
(dataframe.第7数字[_]-1)*37**6
|
47
|
+
(dataframe.第7数字[_]-1)*(37**6)
|
48
48
|
)
|
49
49
|
)
|
50
50
|
```
|
@@ -69,4 +69,6 @@
|
|
69
69
|
|
70
70
|
戻し方を明かしちゃうと勉強にならないので、~~明日までに~~考えてみてください。
|
71
71
|
|
72
|
+
※私は数学に詳しくないので、このアプローチが本当に正しい答えを導くかどうかについては保証しません。
|
72
|
-
|
73
|
+
あくまで既存のプログラムを生かす形での、正しそうな答えを導くためのショートカットなアプローチを示しただけです。
|
74
|
+
たぶんもっとまっすぐなアプローチをご存知の方がいるはず。
|