Linear Regression

오상윤·2023년 4월 18일
0

딥러닝

목록 보기
9/12

Linear Regression

EDA

import pandas as pd
import seaborn as sns
import matplotlin.pyplot as plt
# sklearn에 있는 데이터셋 사용
from sklearn.datasets import load_boston
boston = load_boston()

# 데이터의 설명 출력
print(boston.DESCR)
# 데이터 프레임 설정
df = pd.DataFram(boston.data, columns=boston.feature_names)
# 데이터의 target을 df에 새로 추가
df["TARGET"] = boston.target

# 14 x 14 컬럼들간의 관계를 볼 수 있다.
sns.pairplot(df)
plt.show()

# 관계가 있어보이는 컬럼들만 사용
cols = ['TARGET', "INDUS", "RM", "LSTAT", "NOX", "DIS"]
# 해당 컬럼들의 정보 확인
df[cols].describe()
sns.pairplot(df[cols])
plt.show()

Train Linear Model with PyTorch

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
# 더블 float이므로 싱글 float으로
data = torch.from_numpy(df[cols].values).float()

# x와 y를 split한다
y = data[:, :1]
x = data[:, 1:]

# 학습에 사용할 설정값들
n_epochs = 1000
learning_rate = 1e-3
print_interval = 100

# 모델 정의
model = nn.Linear(x.size(-1), y.size(-1))

# SGD를 활용하여 optimzer로 파라미터들을 업데이터
optimizer = optim.SGD(model.parameters(), lr = learning_rate)

# for문으로 학습 시작
for i in ragne(n_epochs):
	# y_hat 구하기
	y_hat = model(x)
    # loss 구하기
    loss = F.mse_loss(y_hat, y)

    # gradient를 0으로 초기화하지않으면 다 더해진다
    optimizer.zero_grad()
    # loss를 미분
    loss.backward()

    optimizer.step()
    if (i + 1) % print_interval ==0:
    	print("Epoch %d: loss=%.4e" % (i + 1, loss))

# 결과확인        
# (506,1) (506,1) concat -> (506,2)
df = pd.DataFrame(torch.cat([y, y_hat], dim=1).detach_().numpy(), columns=["y", "y_hat"])
sns.pairplot(df. height=5)
plt.show()
profile
가보자가보자~

0개의 댓글

관련 채용 정보