Я использую в scikit изучение различных решателей и хочу посмотреть, сколько памяти требуется каждому решателю. Таким образом, чтобы отслеживать, какой алгоритм хорошо подходит для систем с низким объемом памяти, таких как встроенные системы. Я попытался с помощью memory-profiler
найти в строках, сколько памяти требуется для расчета решателей:
from memory_profiler import profile
@profile
def z():
from sklearn import svm
clf = svm.SVR(C=1, cache_size=200, coef0=0.0, degree=1, epsilon=0.01, gamma=0.01,
kernel='poly', max_iter=-1, shrinking=True, tol=0.001, verbose=False).fit(X_train, y_train)
from sklearn.linear_model import LinearRegression
clf = LinearRegression(copy_X=True, fit_intercept=True, n_jobs=0.0001, normalize=True).fit(X_train, y_train)
from sklearn.tree import DecisionTreeRegressor
clf = DecisionTreeRegressor().fit(X_train, y_train)
from sklearn.ensemble import RandomForestRegressor
clf = RandomForestRegressor().fit(X_train, y_train)
from sklearn.neural_network import MLPRegressor
clf = MLPRegressor(activation='tanh', alpha=0.001, batch_size='auto', beta_1=0.9,
beta_2=0.999, early_stopping=False, epsilon=1e-08,
hidden_layer_sizes=200, learning_rate='invscaling',
learning_rate_init=0.001, max_iter=200, momentum=0.9,
n_iter_no_change=10, nesterovs_momentum=True, power_t=0.5,
random_state=None, shuffle=True, solver='lbfgs', tol=0.0001,
validation_fraction=0.1, verbose=False, warm_start=False).fit(X_train, y_train)
from sklearn.ensemble import GradientBoostingRegressor
clf = GradientBoostingRegressor().fit(X_train, y_train)
from sklearn.svm import LinearSVR
clf = LinearSVR().fit(X_train, y_train)
z()
С результатом:
Line # Mem usage Increment Line Contents
================================================
553 337.9 MiB 337.9 MiB @profile
554 def z():
557 336.3 MiB 0.0 MiB from sklearn import svm
558
559 336.3 MiB 0.0 MiB clf = svm.SVR(C=1, cache_size=200, coef0=0.0, degree=1, epsilon=0.01, gamma=0.01,
560 338.8 MiB 2.4 MiB kernel='poly', max_iter=-1, shrinking=True, tol=0.001, verbose=False).fit(X_train, y_train)
561
562 338.8 MiB 0.0 MiB from sklearn.linear_model import LinearRegression
563
564 336.4 MiB 0.0 MiB clf = LinearRegression(copy_X=True, fit_intercept=True, n_jobs=0.0001, normalize=True).fit(X_train, y_train)
565
566 336.4 MiB 0.0 MiB from sklearn.tree import DecisionTreeRegressor
567
568 336.4 MiB 0.0 MiB clf = DecisionTreeRegressor().fit(X_train, y_train)
569
570 336.4 MiB 0.0 MiB from sklearn.ensemble import RandomForestRegressor
571
572 336.4 MiB 0.0 MiB clf = RandomForestRegressor().fit(X_train, y_train)
573
574 336.4 MiB 0.0 MiB from sklearn.neural_network import MLPRegressor
575
576 336.4 MiB 0.0 MiB clf = MLPRegressor(activation='tanh', alpha=0.001, batch_size='auto', beta_1=0.9,
577 336.4 MiB 0.0 MiB beta_2=0.999, early_stopping=False, epsilon=1e-08,
578 336.4 MiB 0.0 MiB hidden_layer_sizes=200, learning_rate='invscaling',
579 336.4 MiB 0.0 MiB learning_rate_init=0.001, max_iter=200, momentum=0.9,
580 336.4 MiB 0.0 MiB n_iter_no_change=10, nesterovs_momentum=True, power_t=0.5,
581 336.4 MiB 0.0 MiB random_state=None, shuffle=True, solver='lbfgs', tol=0.0001,
582 339.8 MiB 3.5 MiB validation_fraction=0.1, verbose=False, warm_start=False).fit(X_train, y_train)
583
584
585 339.8 MiB 0.0 MiB from sklearn.ensemble import GradientBoostingRegressor
586
587 336.8 MiB 0.0 MiB clf = GradientBoostingRegressor().fit(X_train, y_train)
588
589
590 336.8 MiB 0.0 MiB from sklearn.svm import LinearSVR
591
592 336.8 MiB 0.0 MiB clf = LinearSVR().fit(X_train, y_train)
Почему некоторые методы / решатели не использовать какую-либо память? Может быть, есть лучший способ отследить использование памяти различными решателями scikit learn?