LinearRegression
이 사용하는 방법은 약 from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(X,y)
print(lin_reg.intercept_, lin_reg.coef_) # 편향, 계수
lin_reg.predict(X_new)
from sklearn.linear_model import SGDRegressor
sgd_reg = SGDRegressor(max_iter=1000, tol=1e-3, penalty=None, eta0=0.1)
sgd_reg.fit(X, y.ravel())
print(sgd_reg.intercept_, sgd_reg.coef_)
LinearRegression
클래스는 scipy.linalg.lstsq()
함수 기반 작동알고리즘 | 훈련 샘플이 많을 때 | 외부 메모리 학습 지원 | feature가 많을 때 | 하이퍼 파라미터 수 | 스케일 조정 필요 | sklearn |
---|---|---|---|---|---|---|
정규방정식 | 빠름 | No | 느림 | 0 | No | - |
SVD | 빠름 | No | 느림 | 0 | No | LinearRegression |
배치 경사 하강법 | 느림 | No | 빠름 | 2 | Yes | SGDRegressor |
확률적 경사 하강법 | 빠름 | Yes | 빠름 | Yes | SGDRegressor | |
미니배치 경사 하강법 | 빠름 | Yes | 빠름 | Yes | SGDRegressor |
from sklearn.preprocessing import PolynomialFeatures
poly_features = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly_features.fit_transform(X)
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
def plot_learning_curves(model, X, y):
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=.2)
train_errors, val_erros = [], []
for m in range(1, len(X_train)):
model.fit(X_train[:m], y_train[:m])
y_train_predict = model.predict(X_train[:m])
y_val_predict = model.predict(X_val[:m])
train_errors.append(mean_squared_eror(y_train[:m], y_train_predict))
val_errors.append(mean_squared_eror(y_val[:m], y_val_predict))
plt.plot(np.sqrt(train_errors), "r-+", linewidth=2, label="훈련 세트")
plt.plot(np.sqrt(train_errors), "b-", linewidth=2, label="검증 세트")
plt.show()
from sklearn.linear_model import Ridge, SGDRegressor
ridge_reg = Ridge(alpha=1, solver="cholesky")
ridge_reg.fit(X,y)
sgd_reg = SGDRegressor(penalty='l2)
sgd_reg.fit(X, y.ravel())
from sklearn.linear_model import Lasso
lasso_reg = Lasso(alpha=0.1)
lasso_reg.fit(X,y)
sgd_reg = SGDRegressor(penalty="l1")
sgd_reg.fit(X,y)
from sklearn.linear_model import ElasticNet
elastic_net = ElasticNet(alpha=0.1, l1_ratio=0.5)
elastic_net.fit(X,y)
l1_ratio
가 혼합 비율 이다.from copy import deepcopy
poly_scaler = Pipeline([
("poly_features", PolynomialFeatures(degree=90, include_bias=False),
("std_scaler", "StandardScaler()"))
])
X_train_poly_scaled = poly_scaler.fit_trasform(X_Train)
X_val_poly_scaled = poly_scaler.transform(X_val)
sgd_reg = SGDRegressor(max_iter=1, tol=-np.infty, warm_start=True,
penalty=None, learning_rate="constant", eta0=0.0005)
minimum_val_error = float("inf")
best_epoch = None
best_model = None
for epoch in range(1000):
sgd_reg.fit(X_train_poly_scaled, y_train)
y_val_predict = sgd_reg.predict(X_val_poly_scaled)
val_error = mean_squared_error(y_val, y_val_predict)
if val_error < minimum_val_error:
minimum_val_error = val_error
best_epoch = epoch
best_model = deepcopy(sgd_reg)
warm_start=True
시, fit()
메소드가 호출될 때 이전 파라미터에서 훈련 진행from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression(C=0.5)
log_reg.fit(X,y)
C
: 규제 강도를 조절하는 하이퍼 파라미터softmax_reg = LogisticRegression(multi_class='multinomial', solver='lbfgs', C=10)
softmax_reg.fit(X,y)
multi_class='multinomial'
, solver='lbfgs'
시, 소프트맥스 회귀 사용 가능from sklearn.linear_model import LinearRegression, Ridge, Lasso, ElasticNet, SGDRegressor, LogisticRegressor
LinearRegression(fit_intercept, positive)
"""
fit_intercept: 편향 여부 (True or False)
positive: 계수를 양수로 고정 (True or False)
"""
Ridge(alpha, fit_intercept, max_iter, tol, solver, positive, random_state)
"""
alpha: L2 규제 강도 조절 (float 0~inf; default=1)
fit_intercept: 편향 여부 (True or False)
max_iter: gradient solver의 반복 횟수 결정 (int)
tol: solution의 정밀도 (float; default=1e-3)
solver: 계산 방법 ("auto", "svd", "cholesky", "lsqr", "sparse_cg", "sag", "saga", "lbfgs")
positive: 계수를 양수로 고정 (True or False)
"""
Lasso(alpha, fit_intercept, precompute, max_iter, tol, warm_start, positive, random_state, selection)
"""
alpha: L1 규제 강도 조절 (float 0~inf; default=1)
fit_intercept: 편향 여부 (True or False)
precompute: 계산 속도 향상을 위해 Gram matrix 사전 계산
max_iter: gradient solver의 반복 횟수 결정 (int)
tol: solution의 정밀도 (float; default=1e-3)
warm_start: True 시, fit을 한번 더 하면 현재 파라미터를 초기값으로 학습 진행
positive: 계수를 양수로 고정 (True or False)
selection: 계수 업데이트 방법 ("cyclic", "random") - random 시, 순차적으로 반복 학습하지 않고 랜덤으로 계수 업데이트
-> random일 시, tol이 1e-4보다 높으면 더욱 빠르게 수렴한다.
"""
ElasticNet(alpha, l1_ratio, fit_intercept, precompute, max_iter, tol, warm_start, positive, random_state, selection)
"""
alpha: L1, L2 규제 강도 조절 (float 0~inf; default=1)
l1_ratio: L1, L2 균형 계수
fit_intercept: 편향 여부 (True or False)
precompute: 계산 속도 향상을 위해 Gram matrix 사전 계산
max_iter: gradient solver의 반복 횟수 결정 (int)
tol: solution의 정밀도 (float; default=1e-3)
warm_start: True 시, fit을 한번 더 하면 현재 파라미터를 초기값으로 학습 진행
positive: 계수를 양수로 고정 (True or False)
selection: 계수 업데이트 방법 ("cyclic", "rancom") - random 시, 순차적으로 반복 학습하지 않고 랜덤으로 계수 업데이트
-> random일 시, tol이 1e-4보다 높으면 더욱 빠르게 수렴한다.
"""
SGDRegressor(loss, penalty, alpha, l1_ratio, fit_intercept, max_iter, tol, shuffle, epsilon, random_state, learning_rate, eta, power_t, early_stopping, validation_fraction, n_iter_no_change, warm_start, average)
"""
loss: 손실 함수 종류 ('squared_error', 'huber', 'epsilon_insensitive', 'squared_epsilon_insensitive')
penalty: 규제 종류 ('l1', 'l2', 'elasticnet'; default:'l2')
alpha: 규제 강도 조절 (float 0~inf; default=1)
l1_ratio: ElasticNet 규제일 시, 균형 계수
fit_intercept: 편향 여부 (True or False)
max_iter: gradient solver의 반복 횟수 결정 (int)
tol: solution의 정밀도 (float; default=1e-3)
shuffle: epoch마다 train data 섞을지 여부
epsilon
learning_rate: 스케쥴링 ('constant', 'optimal', 'invscaling', 'adaptive'; default='invscaling')
eta: 학습률 (default: 0.01)
power_t: 학습률 감소 정도 (default: 0.25)
early_stopping: 조기 종료 여부 (True or False; default=False)
validation_fraction: 조기 종료 시 검증 셋 비율
n_iter_no_change: 성능이 증가하지 않아도 기다릴 반복 횟수 (default=5)
warm_start: True 시, fit을 한번 더 하면 현재 파라미터를 초기값으로 학습 진행
average: 평균 계수값 저장 여부
"""
LogisticRegressor(penalty, dual, tol, C, fit_intercept, intercept_scaling, class_weight, random_state, solver, max_iter, multi_class, warm_start, l1_ratio)
"""
penalty: 규제 종류 ('l1', 'l2', 'elasticnet'; default:'l2')
dual: liblinear일 시, dual 또는 기본 공식 (default: False)
tol: solution의 정밀도 (float; default=1e-3)
C: 규제 강도 역수(alpha 역수) (default=1)
fit_intercept: 편향 여부 (True or False)
intercept_scaling: liblinear일 시 스케일링
class_weight
solver: 최적화 알고리즘 ('newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga')
max_iter: gradient solver의 반복 횟수 결정 (int)
multi_class: 'auto', 'ovr', 'multinomial'
warm_start: True 시, fit을 한번 더 하면 현재 파라미터를 초기값으로 학습 진행
l1_ratio: ElasticNet 규제일 시, 균형 계수
"""
참고
Hands-on Machine Learning with Scikit-Learn, Keras & Tensorflow 2 - 오렐리앙 제롱