선형 회귀 모델을 학습 > AI

본문 바로가기

인공지능 AI

마이홈
쪽지
맞팔친구
팔로워
팔로잉
스크랩
TOP
DOWN

[AI 참조] 선형 회귀 모델을 학습

profile_image
관리자
2024-10-05 13:56 303 0
  • - 첨부파일 : 20241005135855.png (246.0K) - 다운로드
  • - 첨부파일 : 20241005135905.png (13.4K) - 다운로드

본문

이 코드는 Google 스프레드시트의 데이터를 가져와서 선형 회귀 모델을 학습시키고, 이를 통해 예측 값을 계산한 후 그래프로 시각화하는 전체 과정을 보여줍니다. 주요 흐름은 다음과 같습니다:


1. 한글 폰트 설정: 그래프에서 한글을 제대로 표시하기 위해 `NanumGothic` 폰트를 사용하도록 설정합니다.


2. Google Sheets API 설정: 

   - 서비스 계정을 사용하여 Google Sheets API에 인증하고 클라이언트를 생성합니다.

   - 특정 스프레드시트 ID와 시트 이름을 기반으로 데이터를 가져옵니다.


3. 데이터 가공:

   - 스프레드시트에서 B 열과 C 열(두 번째, 세 번째 열)을 X로, D 열(네 번째 열)을 y로 설정하여 회귀 분석에 사용할 데이터를 준비합니다.


4. 회귀 모델 학습:

   - LinearRegression 클래스를 사용해 선형 회귀 모델을 생성하고, X와 y 데이터를 사용해 학습시킵니다.

   - 학습이 완료되면 회귀 계수(가중치) `w1`, `w2`와 절편 `b` 값을 계산해 출력합니다.


5. 새로운 데이터 예측:

   - 1000번째 행의 B, C 값을 가져와 D1000 값을 예측하고, 실제 값과 예측 값을 비교합니다.


6. 그래프 시각화:

   - 실제 D값과 예측된 D값을 비교하여 그래프로 시각화하고, D1000 예측 값을 강조하여 표시합니다.

   - 그래프 제목, 축 레이블, 범례 등에 한글 폰트를 적용하여 표시합니다.


이 코드는 데이터 분석과 예측 결과를 시각화하는 좋은 예로, 특히 Google Sheets API와 회귀 분석을 연계한 작업을 보여줍니다.


LinearRegression.py 

python LinearRegression.py 


import gspread
import numpy as np
from sklearn.linear_model import LinearRegression
from google.oauth2.service_account import Credentials
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm

# 한글 폰트 설정 (NanumGothic 사용)
font_path = 'C:/Windows/Fonts/NanumGothic.ttf'  # 폰트 경로
fontprop = fm.FontProperties(fname=font_path)  # 폰트 속성 설정
plt.rc('font', family='NanumGothic')  # 한글 폰트 적용
plt.rcParams['axes.unicode_minus'] = False  # 마이너스 기호 깨짐 방지

# Google Sheets API 스코프 설정

# 서비스 계정 JSON 파일 경로
creds = Credentials.from_service_account_file(
    'F:/app/ai-gpt.kr/public_html/key/centreor-e8c3cad54c74.json',
    scopes=SCOPES
)

# Google Sheets API 클라이언트 생성
client = gspread.authorize(creds)

# 스프레드시트 ID 및 시트 이름 설정
spreadsheet_id = '1VtpNYw6GpMU1mOQzw0etSB6Bu7Zd3qJRBz8xi0cGHL4'
sheet_name = 'Sheet1'

# 스프레드시트에서 시트 선택
sheet = client.open_by_key(spreadsheet_id).worksheet(sheet_name)

# 범위 설정: A2:D999 범위에서 데이터 가져오기 (2행부터 999행까지 사용)
range_name = 'A2:D999'
data = sheet.get(range_name)

# 데이터 가공
X = np.array([[int(row[1]), int(row[2])] for row in data])  # B값과 C값
y = np.array([int(row[3]) for row in data])  # D값

# 회귀 모델 생성 및 학습
model = LinearRegression()
model.fit(X, y)

# 회귀 계수와 절편 저장
w1, w2 = model.coef_
b = model.intercept_

# 회귀 계수와 절편 출력
print(f"회귀 계수 (가중치): w1 = {w1:.4f}, w2 = {w2:.4f}")
print(f"절편: b = {b:.4f}")
print(f"회귀 방정식: D = {w1:.4f} * B + {w2:.4f} * C + {b:.4f}")

# 1000번째 행의 B값과 C값을 사용하여 D1000 값을 예측
range_name_1000 = 'B1000:C1000'
data_1000 = sheet.get(range_name_1000)[0]
new_x = np.array([[int(data_1000[0]), int(data_1000[1])]])

# D1000 값 예측
predicted_value = model.predict(new_x)

# 예측된 D값 생성
predicted_y = model.predict(X)

# D1000의 실제 값과 예측 값을 출력
actual_value_D1000 = 3572  # 실제 값 설정
print(f"\nD1000 의 실제 값: {actual_value_D1000}")
print(f"D1000 의 예측 값: {predicted_value[0]:.4f}")

# 예측 값과 실제 값을 비교하는 그래프 그리기
plt.figure(figsize=(10, 6))
plt.plot(range(2, 1000), y, label="실제 D값", color='blue')
plt.plot(range(2, 1000), predicted_y, label="예측 D값", linestyle='--', color='red')
plt.scatter(1000, predicted_value, label=f"D1000 예측 값: {predicted_value[0]:.2f}", color='green', marker='x', s=100)

# 그래프 제목, 축 레이블 및 범례 설정 (폰트 적용)
plt.title("실제 D값 vs 예측 D값 (Linear Regression)", fontsize=16, fontproperties=fontprop)
plt.xlabel("데이터 인덱스 (2 ~ 999)", fontsize=12, fontproperties=fontprop)
plt.ylabel("D 값", fontsize=12, fontproperties=fontprop)

# 범례 설정
plt.legend(prop=fontprop)

# 그리드 추가
plt.grid(True)

# 그래프 보여주기
plt.show()
 



댓글목록0

등록된 댓글이 없습니다.

댓글쓰기

적용하기
자동등록방지 숫자를 순서대로 입력하세요.
게시판 전체검색