딥러닝/[ 이론 ]

데이터 생성기

씩씩한 IT블로그 2020. 8. 7. 21:47
반응형

y=ax+b 로 선형회귀분석을 하기위해 데이터를 생성하는 클래스.

 

(1) 소스코드

import numpy as np
import matplotlib.pyplot as plt

class dataset_generator:

    def __init__(self,feature_dim=1,n_sample=100,noise=0):
        self._feature_dim=feature_dim
        self._n_sample=n_sample
        self._noise=noise
        self._coefficient=None
        self._init_set_coefficient()

    # 초기 기울기값 설정, 마지막값은 bias (기울기는 1로 초기화, bias는 0으로 초기화)
    def _init_set_coefficient(self):
        self._coefficient=[1 for _ in range(self._feature_dim)] +[0]

    # 샘플의 개수
    def set_n_sample(self, n_sample):
        self._n_sample = n_sample

    # 노이즈 설정
    def set_noise(self,noise):
        self._noise=noise

    # 기울기 설정
    def set_coefficient(self, coefficient_list):
        self._coefficient=coefficient_list

    def make_dataset(self):
        # x값, n개의 데이터, m차원
        x_data=np.random.normal(0,1,size=(self._n_sample,self._feature_dim))
        # n개의 데이터, 1차원
        y_data=np.zeros(shape=(self._n_sample,1))

        for feature_idx in range(self._feature_dim):
            y_data+=self._coefficient[feature_idx]*x_data[:,feature_idx].reshape(-1,1)
            y_data+=self._coefficient[-1]
            y_data+=self._noise*np.random.normal(0,1,size=(self._n_sample,1))
        return x_data,y_data

    def dataset_visualizer(self):
        if self._feature_dim==1:
            plt.style.use('seaborn')
            fig,ax=plt.subplots(figsize=(10,10))
            ax.plot(x_data, y_data, 'bo', alpha=0.3, markersize=20)

            ax.tick_params(axis='both',labelsize=30)
            ax.set_title("DATASET", fontsize=40, color='darkred')
            ax.set_xlabel("x data", fontsize=30, alpha=0.6)
            ax.set_ylabel("y data", fontsize=30, alpha=0.6)

            plt.show()

        else:
            class feature_dim_error(Exception):
                pass
            raise feature_dim_error("Visualization is valid for only feature_dim ==1")


data_gen=dataset_generator(feature_dim=1)

data_gen.make_dataset()
x_data, y_data=data_gen.make_dataset()
data_gen.dataset_visualizer()

 

(2) 결과

 

* 출처 : 수학적으로 접근하는 딥러닝

반응형