현실에 데이터는 고도의 비선형 자료에 해당하며, 문제 해결에 다양한 제약이 존재한다.
전통적인 최적화 알고리즘들은 이러한 알고리즘을 해결하기에 한계가 존재한다고 한다.
따라서 이러한 한계를 극복하기위해 휴리스틱 알고리즘(Heuristic Algorithm)들이 개발되고 있다고 한다.
* 휴리스틱이란 불충분한 시간이나 정보로 인하여 합리적인 판단을 할 수 없거나,
체계적이면서 합리적인 판단이 굳이 필요하지 않은 상황에서 사람들이 빠르게 사용할 수 있게
보다 용이하게 구성된 간편 추론의 방법이다.
딥러닝도 이에 한 부류에 해당한다.
회귀분석에서도 이러한 휴리스틱 알고리즘이 있는데 기호적 회귀분석이 이에 해당한다고 한다.
기호적 회귀분석은 데이터에 대해 종속변수와 독립변수간에 관계를 가장 잘 설명할 수 있는 수학적 관계를 모델이 직접 생성하는 기법에 해당한다.
from statsmodels.tsa.seasonal import seasonal_decompose
import pandas as pd
import numpy as np
import statsmodels.api as sm
import datetime, dateutil
import matplotlib.pyplot as plt
import gplearn as gpl
from gplearn.genetic import SymbolicRegressor
df = sm.datasets.get_rdataset("AirPassengers").data
df=df.set_index('time')
df.index=pd.date_range(
pd.to_datetime('1949-01-01'),
pd.to_datetime('1961-01-01'),
freq='1M'
)
result = seasonal_decompose(df['value'], model='additive')
df=pd.DataFrame(
[result.seasonal,result.trend,result.resid]).T
df=df.dropna()
train=df.iloc[:100,:]
test=df.iloc[100:,:]
def _xexp(x):
a = np.exp(x);
a[np.abs(a) > 1e+9] = 1e+9
return a
xexp = gpl.functions.make_function( function = _xexp , name = 'xexp', arity=1)
function_set = ['add', 'sub','mul','div']
if 'model' in locals(): del model
model = SymbolicRegressor(population_size = 3000,
tournament_size = 5,
generations = 25,
stopping_criteria = 0.1,
function_set = function_set,
metric = 'rmse',
p_crossover = 0.65,
p_subtree_mutation = 0.15,
p_hoist_mutation = 0.05,
p_point_mutation = 0.1,
verbose = 1,
random_state = None,
n_jobs = -1)
model.fit(train,train.apply(sum,1))
pred=model.predict(test)
plt.plot(test.apply(sum,1).values)
plt.plot(pred)
'통계 및 인공지능' 카테고리의 다른 글
[XAI]설명가능한 AI(1/3) (0) | 2021.02.28 |
---|---|
[PCA]차원의 축소 (0) | 2021.02.28 |