on
모델링 - 케일 엽수 증가 및 LAI 예측 모델 with AIHub V2
모델링 - 지난 글
목차
기존의 케일 엽수 증가 및 LAI 예측 모델에서 발생한 문제점을 수정함과 동시에 피팅에 사용한 데이터를 조금 더 정제하여 더 정확한 모델을 만들고자 하였다.
기존 데이터 엽수의 이상값을 이미지로 직접 확인하여 수정하는 과정을 통해 정제된 엽수 데이터를 확보하였다. 또한 DAP 0~30일 까지 모두 일관적으로 18°C, 21°C, 24°C 온도 분포를 가지는 엽수만을 이용하여 다시 피팅하였다.
엽수 증가 모델
데이터 전처리
데이터의 이상값을 제거하고, DAP에 따른 온도 분포가 일정한 개체만을 선정하여 DAP에 따른 엽수 분포에 대한 산점도를 그려보았다.
모수 추정
각 온도별 DAP 별 엽수 분포 평균을 구하여 예측값과의 오차에 제곱을 하여 error
를 계산하였고, 이를 합산하여 총 error
의 값이 가장 작도록 엑셀의 해찾기를 이용하여 모수를 추정하였다.
error
: (LN - LN_observed)^2
앞선 엽수증가 모델 V1 에서 정의한 엽수 증가 식을 적용하고, 모수를 추정하였다.
엑셀의 해찾기를 통해 error
의 합산이 가장 작은 모수를 찾았다.
최종 모수는 다음과 같다.
결과
최종 피팅 결과는 다음과 같다.
18°C 결과
21°C 결과
24°C 결과
LAI 예측
기존 LAI 예측에서의 문제
새로 전처리한 데이터를 이용하여 온도별 엽수에 따른 엽장 분포를 산점도로 그려보았다.
기존 LAI 예측은 엽장과 엽면적에 따른 2차식을 도출하고, 엽서에 따른 엽장 분포를 통해 엽장의 길이를 구하고, 이를 2차식에 대입하여 엽면적을 계산하는 방식으로 모델이 구성되었다.
이때, 엽서에 따른 엽장의 분포는 가우시안 정규분포로 피팅된다.
하지만 생장점에서 새로 발생한 잎의 엽장이 4cm인 점과 새로 엽이 발생했음에도 기존 잎의 엽장이 0에 수렴하는 분포로 보아 엽수 3~8장 일때의 엽장의 길이와 11~17장 일때의 엽장의 길이가 정상적이지 않다고 판단하였다.
수식 변경
midRateLN: = IF(AND(Ta > 0, Ta<Txleaf), Rxleaf * 모수 / LeafNumber *((Txleaf-Ta)/(Txleaf-Toleaf))*(Ta/Toleaf)^(Toleaf/(Txleaf-Toleaf)),0)
따라서 위 엽 발생 모델에서 새롭게 도출한 식인 midRateLN
을 모티브로 삼아 엽장 분포 식을 변경하였다.
midRateLn
에서 엽수가 6장인 구간 전후로 엽발생 속도가 달라지는 경향을 알 수 있었다. 따라서 엽장의 분포 역시 이를 따라
엽수 6장 전후로 분포가 달라질 것이라 가정하고 다시 피팅을 하였다.
기존 파이썬의 배추모델의 경우 엽장 분포를 다음과 같이 피팅한다. 가우시안 정규분포
def eachLenDistribution(self, leafnumber): ## internal function
eachLenDist = []
if leafnumber < 8: ## limit of leafnumber 8장 보다 작을 경우 오류 방지
for i in range(leafnumber):
eachLenDist.append(1.0)
else:
a = 20.347*np.log(leafnumber) - 40.703 # cabbage
b = 0.2086*(leafnumber) + 1.6862 # cabbage
for i in range(1,leafnumber+1):
eachLen = a * np.exp(-0.5 * ((i - b) / b)**2)
eachLenDist.append(eachLen)
return eachLenDist
결과
재식밀도에 대한 파라미터와 RMSE는 다음과 같다.
예측한 LAI와 실측값에 대한 결과는 다음과 같다.
엽 각도
엽수가 6장이 되는 기점으로 엽수 및 엽장이 증가 하는 속도가 달라지는 것을 데이터를 통해서 확인할 수 있었다. 이에 대한 원인을 정성적으로 파악하기 위해 탑뷰로 찍은 이미지를 직접 확인한 결과, 엽수가 5장에서 6장이 되는 지점 부터 새로 발생한 잎에 의해 가려지는 부분이 생기는 것을 확인할 수 있었다.