

Keras
に手を出そうとしている者です。やりたいことのイメージはついてるのですが、どのようなキーワードでGoogleなどで検索をすればよいか、とっかかり自体がつかめないです。  
以下を実現するプログラムはどのように作ればよいのでしょうか？  
Googleで調べるにしてもどの様に調べればよいか判らないので、質問させていただきました。

## やりたいこと

  * 学習データとして数字を使う
  * 必ず **5つ** の乱数をカンマ区切りで出力するようにする
  * 出力する乱数は、学習データに伴い偏りが出るようにする

## 例

最初の内は
`(1,2,3,4,5)`のように１~5までの純粋な乱数を発生させる。しかし、学習データに「1」を学習させると、乱数の発生の際に「1」の発生率が高くなる。学習データに「99」の数字を学習させると、「99」の乱数も出力するようになる。


CC BY-SA 4.0
2021-09-06T02:34:44.193
82272
2021-12-29T13:49:43.093
2021-09-08T03:37:53.283
7500
48083
question
python tensorflow keras
keras で確率の偏った乱数を生成する


学習データとして、複数の整数をリストに入れて、用意したとします。学習データはいくら大きくても問題ありません。

例1:

[code]

    a = [1, 2, 3, 4, 5]
    
[/code]

例2:

[code]

    a = [1, 2, 3, 4, 5, 2, 3, 4, 5, 3, 4, 5, 4, 5, 5]
    
[/code]

このリストに入っている整数に従って（つまり、それぞれの数字の個数に出る確率が比例する）乱数を1つ生成する最も簡単な方法は、[`random.choice`](https://docs.python.org/ja/3/library/random.html#random.choice)を使うことです。

[code]

    from random import choice
    
    a = [1, 2, 3, 4, 5, 2, 3, 4, 5, 3, 4, 5, 4, 5, 5]
    
    print(choice(a))
    
[/code]

ヒストグラムを描いてみると、実際に偏っていることが確認できます。

[code]

    from random import choice
    import matplotlib.pyplot as plt
    import numpy as np
    
    a = [1, 2, 3, 4, 5, 2, 3, 4, 5, 3, 4, 5, 4, 5, 5]
    
    numbers = [choice(a) for _ in range(15000)]
    
    plt.hist(numbers, bins=np.arange(min(a), max(a) + 2) - 0.5, rwidth=0.3)
    plt.show()
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/Q6XkB.png)](https://i.stack.imgur.com/Q6XkB.png)

あとは、これを5個まとめてカンマ区切りで出力すればよいことになります。例えば、次のプログラムでは 5個/回 × 10回 = 計50個
の乱数を出力しています。

[code]

    from random import choice
    
    a = [1, 2, 3, 4, 5, 2, 3, 4, 5, 3, 4, 5, 4, 5, 5]
    
    for _ in range(10):
        numbers = [choice(a) for _ in range(5)]
        print(', '.join(str(n) for n in numbers))
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/fzSHg.png)](https://i.stack.imgur.com/fzSHg.png)


CC BY-SA 4.0
2021-12-29T13:49:43.093
85400
2021-12-29T13:49:43.093
36010
82272
answer