수리통계 분석 코딩 실습

[torch] torch.stack을 이용한 데이터 쌓기 with Boston data 본문

대학원/통계프로그래밍

[torch] torch.stack을 이용한 데이터 쌓기 with Boston data

얼려먹는 요구르트 2023. 10. 23. 22:22

 

✔ 여러개의 torch.tensor를 쌓을 수 있는 torch.stack에 대해 알아보자

 

 

모델을 적합하기 위해 X matrix를 만들 때 열로 데이터를 쌓아야 할 때가 있다.

그럴때, torch.stack을 이용할 수 있다.

 

1. torch.stack

torch.stack이란? 
torch.tensor값을 행 혹은 열의 형태로 쌓아주는 방법 

 

torch.stack의 방식은 다음과 같다.

우리는 axis = 1 즉, 열 방향으로 붙여주는 것만 생각한다! 행 방향으로 붙이고 싶으면 axis = 0으로만 바꿔주면 된다!

 

 

Boston 데이터를 이용해보자

 

[1] Boston 데이터 로드를 위한 패키지 import

!pip install ISLP

colab으로 사용시 반드시 위의 cell을 돌려준 뒤 runtime을 다시 시작한 후 아래를 진행해야 한다.

from ISLP import load_data
from ISLP.models import (ModelSpec as MS,
                         summarize,
                         poly)
import ISLP
import numpy as np
import pandas as pd
# from matplotlib.pyplot import subplots

# import statsmodels.api as sm
Boston = load_data("Boston")
Boston.head()

Boston 데이터 형태

 

 

[2] 원하는 대상('lstat') 추출

위의 Boston 데이터 중 쌓고자 하는 lstat와 age의 값만 추출한다. 

design = MS(['lstat', 'age'])
X = design.fit_transform(Boston)

 

[3] torch import

패키지 활용을 위한 torch를 import한다.

# Dataset and DataLoader
import torch
from torch.utils.data import Dataset, DataLoader, TensorDataset
from torch import optim

 

[4] age, lstat 데이터 열로 쌓기

X1 = torch.tensor( X['age'] , dtype=torch.float32)
X2 = torch.tensor( X["lstat"], dtype=torch.float32)

# X1, X2 열로 쌓기
X_2var = torch.stack([X1, X2], axis=1)

 

X_2var의 결과와 실제 Boston의 age,lstat값

잘 쌓였음을 알 수 있다. 만약 row로 쌓고싶으면 axis = 0을 써라!