4.5.3 회귀 모델의 자원 활용
3.7.3절에 이어 회귀 방법론의 자원 활용을 파악할 수 있는 독립적인 테스트 스크립트를 짜 두었습니다. 다음 코드를 이전 코드와 비교해 보면 두 가지를 제외하고 나머지는 모두 같다는 것을 알 수 있어요. (1) 다른 학습 방법론과 (2) 다른 학습 성능 척도입니다. 다음은 k-NN-R과 LR에 적용된 스크립트입니다.
In [24]:
!cat scripts/perf_02.py
import timeit, sys import functools as ft import memory_profiler from mlwpy import * def knn_go(train_ftrs, test_ftrs, train_tgt): knn = neighbors.KNeighborsRegressor(n_neighbors=3) fit = knn.fit(train_ftrs, train_tgt) preds = fit.predict(test_ftrs) def lr_go(train_ftrs, test_ftrs, train_tgt): linreg = linear_model.LinearRegression() fit = linreg.fit(train_ftrs, train_tgt) preds = fit.predict(test_ftrs) def split_data(dataset): split = skms.train_test_split(dataset.data, dataset.target, test_size=.25) return split[:-1] # 테스트 타깃은 필요하지 않습니다 def msr_time(go, args): call = ft.partial(go, *args) tu = min(timeit.Timer(call).repeat(repeat=3, number=100)) print("{:<6}: ~{:.4f} sec".format(go.__name__, tu)) def msr_mem(go, args): base = memory_profiler.memory_usage()[0] mu = memory_profiler.memory_usage((go, args), max_usage=True)[0] print("{:<3}: ~{:.4f} MiB".format(go.__name__, mu-base)) if __name__ == "__main__": which_msr = sys.argv[1] which_go = sys.argv[2] msr = {'time': msr_time, 'mem':msr_mem}[which_msr] go = {'lr' : lr_go, 'knn': knn_go}[which_go] sd = split_data(datasets.load_iris()) msr(go, sd)