안녕하세요. Johncom 입니다.
AI 분석 로또 번호 추첨기가 인기있는 글이 되어서 이번에 조금 더 간편한 버전으로 왔습니다.
업그레이드 버전에 앞서 내용들을 알고 싶으시다면 아래 링크 2개 참고하시면
더욱 이해가 빠릅니다.
(상, 하)
https://johncom.tistory.com/71
https://johncom.tistory.com/72
앞서 Python 설치는 블로그 내에서 확인이 가능합니다. (아래 URL)
https://johncom.tistory.com/49
본격적으로 로또 본허 생성기 (추첨기) 제작을 진행하겠습니다.
1. 패키지 설치
pip install numpy
pip install pandas
pip install scikit-learn
pip install tensorflow
- 패키지 설치가 되지 않을 경우 오류를 유발할 수 있습니다.
2. 역대 로또 번호 CSV 파일 준비
위 상단 URL 참고하여 Lotto csv 파일 준비
- `lotto.csv` 파일이 필요합니다 (과거 로또 당첨 번호 데이터)
- CSV 파일 형식: 각 행에 회차별 6개의 당첨번호가 포함되어야 합니다
3.코드 구성
## 3. 코드 구성 요소 설명
### 데이터 처리 부분
```python
# 데이터 로드 및 전처리
data = pd.read_csv('lotto.csv')
scaler = MinMaxScaler()
data_scaled = scaler.fit_transform(data)
```
- CSV 파일에서 데이터를 읽어옵니다
- MinMaxScaler를 사용하여 데이터를 0~1 사이의 값으로 정규화합니다
### 시계열 데이터 준비
```python
def create_dataset(data, time_steps=1):
X, y = [], []
for i in range(len(data) - time_steps):
X.append(data[i:(i + time_steps)])
y.append(data[i + time_steps])
return np.array(X), np.array(y)
```
- 이전 35회차의 데이터를 사용하여 다음 회차를 예측하기 위한 데이터셋을 만듭니다
### LSTM 모델 구성
```python
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(X.shape[1], X.shape[2])))
model.add(LSTM(50, return_sequences=False))
model.add(Dense(6))
```
- LSTM 레이어 2개와 Dense 레이어 1개로 구성된 딥러닝 모델을 만듭니다
- 최종적으로 6개의 숫자를 출력합니다
### 예측 및 번호 생성
```python
def generate_multiple_predictions(predictions, num_sets=5):
# 중복되지 않는 6개의 숫자를 5세트 생성
# 예측값을 기반으로 확률을 계산하여 번호 선택
```
- 학습된 모델의 예측값을 기반으로 5세트의 로또 번호를 생성합니다
- 각 세트는 1~45 사이의 중복되지 않는 6개 숫자로 구성됩니다
- 생성된 번호는 오름차순으로 정렬됩니다
4. 번호 추첨 및 소스코드
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.csv')
# 데이터 스케일링
scaler = MinMaxScaler()
data_scaled = scaler.fit_transform(data)
# 시계열 데이터 준비
def create_dataset(data, time_steps=1):
X, y = [], []
for i in range(len(data) - time_steps):
X.append(data[i:(i + time_steps)])
y.append(data[i + time_steps])
return np.array(X), np.array(y)
time_steps = 35
X, y = create_dataset(data_scaled, time_steps)
X = X.reshape(X.shape[0], X.shape[1], X.shape[2])
# LSTM 모델 구성
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(X.shape[1], X.shape[2])))
model.add(LSTM(50, return_sequences=False))
model.add(Dense(6))
model.compile(optimizer='adam', loss='mean_squared_error')
# 모델 학습
model.fit(X, y, epochs=100, batch_size=32, validation_split=0.2)
# 예측
predictions = model.predict(X)
# 원래 스케일로 역변환
predictions_scaled_back = scaler.inverse_transform(predictions)
def generate_multiple_predictions(predictions, num_sets=5):
all_predictions = []
# 수정된 부분: 확률 배열 생성
numbers = np.arange(1, 46) # 1부터 45까지의 숫자
probabilities = np.ones(45) / 45 # 균등한 확률 분포 사용
for _ in range(num_sets):
# 중복되지 않는 6개의 숫자 선택
selected_numbers = np.random.choice(
numbers,
size=6,
replace=False,
p=probabilities
)
# 오름차순 정렬
sorted_numbers = np.sort(selected_numbers)
all_predictions.append(sorted_numbers)
return np.array(all_predictions)
# 5세트의 예측 번호 생성
predicted_sets = generate_multiple_predictions(predictions_scaled_back, num_sets=5)
# 결과 출력
print("\n=== 예측된 5세트의 로또 번호 (오름차순) ===")
for i, numbers in enumerate(predicted_sets, 1):
formatted_numbers = ' '.join(f"{int(num):02d}" for num in numbers)
print(f"세트 {i}: {formatted_numbers}")
- 위 소스코드를 실행하면 원하는 출력값을 얻을 수 있습니다.
'프로그래밍 > IT(비지정주제)' 카테고리의 다른 글
한방 패키지 APM(Apache, MySQL, PHP) 구성하여 웹 서버 만들기 (10) | 2024.10.16 |
---|---|
Hyper-v 무료 윈도우 가상머신 - 하나의 PC에 윈도우를 또 설치하자 (0) | 2024.10.13 |
윈도우 10 무료 설치 방법 - 포맷 클린 설치 (4) | 2024.10.13 |
AI 빅데이터 분석을 이용한 로또 번호 예측 만들기 (하) - GPT와 함께 (0) | 2024.07.27 |
AI 빅데이터 분석을 이용한 로또 번호 예측하기 (상) - GPT와 함께 (0) | 2024.07.27 |