2022년 8월 3일 수요일

Data Regression (데이터 함수 구하기)

 4) 주어진 데이터를 regression 하여, 

     함수를 구하는 방법으로, 

     analytical 함수를 얻기 위해 polynomial 등의 일반식을 이용하는 경우가 많으나, 

     실제로는 데이터의 regression이 생각보다 잘 나오지 않는다 

     예를 들어, 아래와 같은 데이터가 있다고 한다면,  


Data (Reaction:  A --> B)

T (min)     0.0        1.0        3.5        7.0        12.0     

A (mol)    0.05       0.04      0.03      0.02        0.01



     Python의 numpy polyfit 을 통해 2nd order 의 함수를 얻기는 했으나, 
    
     벗어난 데이터들도 있고 뭔가 부족한 느낌이 든다 

     데이터의 오차로 치부해 버리기 쉬우나, 

     신빙성이 높은 실제 데이터라고 한다면, 저 차이를 무시하기 어렵다  

     그렇다고, 3차 또는 4차 식으로 만들지도 못한다 

     Regression의 모양이 매우 이상해진다 


 4-1) Tensorflow 를 이용하여 regression 을 해보자 


      프로그램 활용에 조금은 시간 투자를 해야 하지만, 

      Tensorflow를 활용하여 regression 한 경우,

      데이터의 fit이 훨씬 좋은 느낌이 든다 

      물론, 반응 속도를 계산하기 위해 미분값을 이용하기 위해서는, 

      analytical로 활용하지 못하고 numerical method 를 활용하여야 하나, 

      특정 시간의 미분값이 실제값에 훨씬 더 근접한 계산이 될 수 있다  


4-2) 간단하게는 numpy의 gradient 함수를 이용할 수도 있다 


*반응 속도의 값을 비교하기 위해서는 regression으로 얻은 함수를 시간에 대해 미분하여, 각각의 Time point에 해당하는 반응 속도를 구할 수 있다 

**다만, 실제로 상기 두 가지의 regression에서 T=0 에서의 미분값을 구하면 2배 이상의 값 차이가 생긴다 (데이터 fit의 차이에 따른 값이 꽤나 크다 / 얼핏 보아도 처음 붉은점 2개의 기울기가 푸른 실선의 기울기 보다 크게 보인다)

***이 정도의 반응 속도 차이를 보인다면, design equation 등에도 활용하기가 까다롭다 (어느 것이 신뢰가 높을지 판단하기도 어렵다 / 어느 것을 오차로 치부할지도 어렵다) 

****그래프를 그려서 육안으로 보이는 경향성을 신뢰하자 (데이터는 오차가 없다는 가정을 하던지, 실험을 많이 해서 오차가 없는 데이터를 얻어내던지) 


댓글 없음:

댓글 쓰기