質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

Python AI 宝くじ当選番号予測 ロト7

EDM
EDM

総合スコア30

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0評価

2クリップ

9881閲覧

投稿2020/09/24 07:33

編集2020/09/29 05:18

pythonで機械学習、深層学習によって宝くじ当選番号予測プログラム ロト7Versionを作っています。
参考資料はこちら
(実行時は時間短縮のためself.epochsを1にしています。)

整理整頓しました。

質問
個人的にパラメータの部分がよくわからないのですが、コメントのような理解でよろしいでしょうか?self.units = 6これについては何の意味があるのか 単位?単位が6?

ロト7のcsvはこちらからダウンロードしています。ボーナス数字以下については使わないため、削除しています。

python

#各インポート宣言 #numpy 数値計算を効率的に行うためのライブラリ #pandas データ分析を効率的に行うためのライブラリ #tflearn 深層学習ライブラリ #time 時刻に関するさまざまな関数を提供 #itertools 効率的なループ実行のためのイテレータ生成関数 #sklearn 機械学習ライブラリ #preprocessing 前処理用のライブラリ import numpy as np import pandas as pd import tflearn import time import itertools from sklearn import preprocessing #予測LSTMクラス class PredictionLSTM: def __init__(self): #LSTM訓練パラメータ #steps_of_history いくつ前のデータまでを学習に用いるか #steps_of_history いくつ先のデータを予測するか #units よくわからない #epochs 一つの訓練データを何回繰り返して学習させるか #batch_size バッチサイズ self.steps_of_history = 10 self.steps_of_future = 1 self.units = 6 self.epochs = 1 self.batch_size = 1 #データセット作成 def create_dataset(self,data): x,y = [],[] for i in range(0,len(data) - self.steps_of_history,self.steps_of_future): a = i + self.steps_of_history x.append(data[i:a]) y.append(data[a]) x = np.reshape(np.array(x),[-1,self.steps_of_history,1]) y = np.reshape(np.array(y),[-1,1]) return x,y #予測データ作成 def create_predict_dataset(self,data): latest_x = np.array([data[-self.steps_of_history:]]) latest_x = np.reshape(latest_x,(-1,self.steps_of_history,1)) return latest_x #訓練評価データ分割 def split_dataset(self,x,y,test_size=0.1): pos = round(len(x) * (1 - test_size)) train_x,train_y = x[:pos],y[:pos] test_x,test_y = x[pos:],y[pos:] return train_x,train_y,test_x,test_y #モデル作成 def _create_model_by_tflearn(self): net = tflearn.input_data(shape=[None,self.steps_of_history,1]) #LSTM net = tflearn.lstm(net,n_units = self.units) net = tflearn.fully_connected(net,1,activation = "linear") net = tflearn.regression(net,optimizer = "adam",learning_rate = 0.001,loss = "mean_square") model = tflearn.DNN(net,tensorboard_verbose = 0) return model #訓練 def train(self,train_x,train_y): model = self._create_model_by_tflearn() model.fit(train_x,train_y,validation_set = 0.1,batch_size = self.batch_size,n_epoch = self.epochs) return model #予測 def predict(self,model,data): return model.predict(data) #評価誤差アルゴリズム def rmse(self,y_pred,y_true): return np.sqrt(((y_true - y_pred) ** 2).mean()) def rmsle(self,y_pred,y_true): return np.sqrt(np.square(np.log(y_true + 1) - np.log(y_pred + 1)).mean()) def mae(self,y_pred,y_true): return np.mean(np.abs((y_true - y_pred))) def mape(self,y_pred,y_true): return np.mean(np.abs((y_true - y_pred) / y_true)) * 100 #メイン処理 if __name__ == "__main__": #処理の速さを図る START_TIME = time.time() #1~37までの数字を用意 a = {m for m in range(1,38)} d = {tuple(p): i for i, p in enumerate(itertools.combinations(a,7))} e = {v: k for k, v in d.items()} dataframe = pd.read_csv("./loto7.csv",encoding='cp932') dataframe = dataframe[["第1数字","第2数字","第3数字","第4数字","第5数字","第6数字","第7数字"]] data = dataframe.index.map( lambda _:d[ tuple(sorted( [(dataframe.1数字[_]), (dataframe.2数字[_]), (dataframe.3数字[_]), (dataframe.4数字[_]), (dataframe.5数字[_]), (dataframe.6数字[_]), (dataframe.7数字[_]) ] )) ] ) data = data.values.reshape(data.shape[0], 1).astype(dtype=np.float32) #正規化 #データが0~1に入るよう変換 #fit_transform()について #fit()を実施した後に、同じデータに対してtransform()を実施する #fit()とは #渡されたデータの最大値、最小値、平均、標準偏差、傾き...などの統計を取得して、内部メモリに保存する #transform()とは #fit()で取得した統計情報を使って、渡されたデータを実際に書き換える scaler = preprocessing.MinMaxScaler() data = scaler.fit_transform(data) #LSTMインスタンス作成 lstm = PredictionLSTM() #訓練,評価データ作成 #create_datasetの処理を正規化したデータを用いてx,yに代入 #split_datasetの処理をx,yを用いて訓練、評価データに代入 x,y = lstm.create_dataset(data) train_x,train_y,test_x,test_y = lstm.split_dataset(x,y) #訓練 #trainの処理を作成したtrain_x,train_yを使って行い、結果をmodelに代入 model = lstm.train(train_x,train_y) #評価 #訓練予測にpredictの処理を訓練したデータとtrain_xを用いて行う #評価予測にpredictの処理を訓練したデータとtest_xを用いて行う train_predict = lstm.predict(model,train_x) test_predict = lstm.predict(model,test_x) #RMSE(Root Mean Squared Error) この値が小さければ小さいほど、誤差の小さいモデルである #訓練誤差にrmseの処理をtrain_yと訓練予測データを用いて行う #評価誤差にrmseの処理をtest_yと評価予測データを用いて行う #Train ScoreとTest Scoreを出力 train_score = lstm.rmse(train_y,train_predict) test_score = lstm.rmse(test_y,test_predict) print("Train Score: {0:.3f} RMSE".format(train_score)) print("Test Score: {0:.3f} RMSE".format(test_score)) #予測 #latest_xにcreate_predict_datasetの処理を正規化したデータを用いて行う #次の予測に訓練データをlatest_xを用いて行う #予測に正規化のinverse_transformを”次の予測”を用いて行う latest_x = lstm.create_predict_dataset(data) next_prediction = model.predict(latest_x) next_prediction = scaler.inverse_transform(next_prediction) #予測結果を出力 print("次の当選番号の予測は: {}".format(e[np.round(next_prediction[0][0])])) #測定時間を出力 print("時間: {0:.1f}sec".format(time.time() - START_TIME))

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

toast-uz

2020/09/24 12:10

質問は1投稿で1つにして、質問に関係ある範囲に絞りかつ実行可能で問題を再現可能なコードを提示いだたくと、回答がつきやすいと思います。
EDM

2020/09/25 00:11

意見ありがとうございます。見直してみます。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。