반응형

(상)편에 이어서

Python을 이용하여 실제 번호 예측을 진행해 보겠습니다.

#로또번호예측기

 

코드는 블로그 최하단에 넣어 둘게요.

csv파일은 https://johncom.tistory.com/71

 

AI 빅데이터 분석을 이용한 로또 번호 예측하기 (상) - GPT와 함께

안녕하세요. JohnComputer 입니다.오늘은 한번 GPT를 이용해서 로또 번호 예측 시스템을 만들어 보려고 해요. 아래는 GPT와 빅데이터 분석에 대한 글들이 있어로또 예측기를 바로 만들고 싶은 분들 (

johncom.tistory.com

python 설치는 https://johncom.tistory.com/49

 

python3 설치 부터 경로 설정까지 (pip, python, 환경 변수, path)

안녕하세요. JohnCom 입니다. 오늘은 제 로컬 PC에 Python3 를 설치를 진행하는데 설치하는 방법을 정리해두면 처음 시작하는 분들에게 도움이 될 것 같아서 이렇게 따로 정리해둘려고 글을 씁니다. "

johncom.tistory.com

간단한 로또 번호 추출기는 https://johncom.tistory.com/59

 

python(Random), chatgpt, Deepl 를 활용한 로또 생성기

안녕하세요. JohnComputer 입니다. 오랜만에 글을 적게 되는데요. 요즘 너무 바뻐서 블로그에 글을 쓰고 있지 못하네요 ㅠㅠ 그래도 요번에 간단하게 chatGPT 사용방법, Deepl 소개를 가지고 함께 로또

johncom.tistory.com

 

 

패키지 설치

바로 실행하게 되면 다음과 같은 오류가 발생할텐데

 

필요한 패키지 먼저 설치할게요.

 

pip install numpy
pip install pandas
pip install -U scikit-learn

## tenserflow 설치
pip install tensorflow

tenorflow의 경우 여러가지 설명하자면 너무 복잡하니 간단하게 사용방법만 보아요

 

저는 가상환경 만들어서 진행해서 파일이 있지만

lotto.csv

lotto.py

이렇게 두개 파일만 만들면 된답니다.

 

파이썬 파일을 실행하면

 

 

import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

# CSV 파일 로드
data = pd.read_csv('lotto_data.csv')  # 'lotto_data.csv' 파일을 읽어 데이터프레임으로 로드합니다.

# 데이터 스케일링
scaler = MinMaxScaler()  # MinMaxScaler 객체 생성
data_scaled = scaler.fit_transform(data)  # 데이터 스케일링 (0과 1 사이로 변환)

# 시계열 데이터 준비 함수
def create_dataset(data, time_steps=1):
    X, y = [], []
    for i in range(len(data) - time_steps):
        X.append(data[i:(i + time_steps)])  # time_steps 만큼의 데이터로 입력값 생성
        y.append(data[i + time_steps])      # time_steps 이후의 데이터로 출력값 생성
    return np.array(X), np.array(y)  # 입력값과 출력값 배열 반환

# 시계열 데이터 생성
time_steps = 10  # 이전 10회차 데이터를 사용하여 다음 회차를 예측합니다.
X, y = create_dataset(data_scaled, time_steps)
X = X.reshape(X.shape[0], X.shape[1], X.shape[2])  # LSTM 입력 형식에 맞게 데이터 재구성

# LSTM 모델 구성
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(X.shape[1], X.shape[2])))  # 첫 번째 LSTM 레이어
model.add(LSTM(50, return_sequences=False))  # 두 번째 LSTM 레이어
model.add(Dense(6))  # Dense 레이어: 6개의 숫자를 예측
model.compile(optimizer='adam', loss='mean_squared_error')  # 모델 컴파일

# 모델 학습
model.fit(X, y, epochs=100, batch_size=32, validation_split=0.2)  # 모델 학습 (100 에포크, 배치 크기 32, 검증 데이터 20%)

# 예측
predictions = model.predict(X)  # 학습된 모델을 사용하여 예측

# 원래 스케일로 역변환
predictions_scaled_back = scaler.inverse_transform(predictions)  # 예측된 값을 원래 스케일로 변환

# 예측된 값에서 확률적으로 6개의 번호를 선택하는 함수
def pick_numbers(predictions):
    picked_numbers = []
    for i in range(len(predictions)):
        picked_numbers.append(np.random.choice(predictions[i].astype(int), 6, replace=False))  # 각 회차별로 6개의 번호를 무작위로 선택
    return np.array(picked_numbers)

# 가장 최근 예측된 회차의 숫자를 사용하여 번호 선택
picked_numbers = pick_numbers(predictions_scaled_back[-1:])  # 마지막 예측된 회차의 숫자를 사용
print("Predicted numbers:", picked_numbers)  # 예측된 번호 출력

 

저는 빅데이터나 AI 전문가는 아니지만

개발을 같이 하기 때문에 사용방법만 터득해서 한번 만들어 보았습니다.

사용중에 어려운 부분있으면 댓글 남겨주세요

반응형