반응형
from sklearn.linear_model import LinearRegression, Ridge, Lasso
from sklearn.metrics import r2_score,mean_absolute_error, mean_squared_error
import numpy as np
우선 라이브러리를 선언합니다.
dir = './gdrive/My Drive/Colab Notebooks/'
trainData = np.genfromtxt(dir+'oil_data_train.csv',delimiter=',', skip_header=1)
X_train = trainData[:,:-1]
y_train = trainData[:,-1]
훈련할 데이터를 로드합니다. 여러 본인의 데이터를 활용해도 무방합니다.
testData = np.genfromtxt(dir+'oil_data_test.csv',delimiter=',', skip_header=1)
X_test = testData[:,:-1]
y_test = testData[:,-1]
마찬가지로 테스트할 데이터를 로드합니다.
ridge_alpha = 1
lasso_alpha = 0.1
linear = LinearRegression()
ridge = Ridge(alpha = ridge_alpha)
lasso = Lasso(alpha = lasso_alpha)
기본적으로 가장 많이 쓰이는 선형, 릿지, 라쏘 모델을 선언합니다.
linear.fit(X_train,y_train)
ridge.fit(X_train,y_train)
lasso.fit(X_train,y_train)
"""
Lasso(alpha=0.1, copy_X=True, fit_intercept=True, max_iter=1000,
normalize=False, positive=False, precompute=False, random_state=None,
selection='cyclic', tol=0.0001, warm_start=False)
"""
그 후, 훈련할 데이터를 넣어서 훈련을 진행합니다.
linear_y_hat = linear.predict(X_test)
ridge_y_hat = ridge.predict(X_test)
lasso_y_hat = lasso.predict(X_test)
linear_r2, ridge_r2, lasso_r2 = r2_score(y_test,linear_y_hat), r2_score(y_test,ridge_y_hat), r2_score(y_test,lasso_y_hat)
linear_MSE, ridge_MSE, lasso_MSE = mean_squared_error(y_test,linear_y_hat), mean_squared_error(y_test,ridge_y_hat), mean_squared_error(y_test,lasso_y_hat)
linear_MAE, ridge_MAE, lasso_MAE = mean_absolute_error(y_test,linear_y_hat), mean_absolute_error(y_test,ridge_y_hat), mean_absolute_error(y_test,lasso_y_hat)
print('R2 score - Linear: %.2f, Ridge: %.2f, Lasso: %.2f' %(linear_r2, ridge_r2, lasso_r2))
print('MSE - Linear: %.2f, Ridge: %.2f, Lasso: %.2f' %(linear_MSE, ridge_MSE, lasso_MSE))
print('MAE - Linear: %.2f, Ridge: %.2f, Lasso: %.2f' %(linear_MAE, ridge_MAE, lasso_MAE))
"""
R2 score - Linear: 0.61, Ridge: 0.69, Lasso: 0.60
MSE - Linear: 0.11, Ridge: 0.08, Lasso: 0.11
MAE - Linear: 0.18, Ridge: 0.14, Lasso: 0.26
"""
이제 테스트할 데이터를 넣어서 테스트를 진행합니다. 각 모델에 따라 값들을 확인해볼 수도 있습니다.
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(len(y_test)), y_test, '-', label="Original Y")
ax.plot(range(len(y_test)), linear_y_hat, '-x', label="linear_y_hat")
ax.plot(range(len(y_test)), ridge_y_hat, '-x', label="ridge_y_hat")
ax.plot(range(len(y_test)), lasso_y_hat, '-x', label="lasso_y_hat")
plt.legend(loc='upper right')
plt.show()
이제 테스트할 결과를 다음과 같이 나타낼 수 있습니다. 실제 데이터와 비교해서 어떻게 예측을 하고 있는지 가시화하면 이 이 모델이 활용할 수 있을지 알 수 있습니다.
ridge_result = []
lasso_result = []
alpha = [0.001,0.01,0.1,1,10]
for a in alpha:
ridge = Ridge(alpha = a)
lasso = Lasso(alpha = a)
ridge.fit(X_train,y_train)
lasso.fit(X_train,y_train)
ridge_y_hat = ridge.predict(X_test)
lasso_y_hat = lasso.predict(X_test)
ridge_r2, lasso_r2 = r2_score(y_test,ridge_y_hat), r2_score(y_test,lasso_y_hat)
ridge_result.append(ridge_r2)
lasso_result.append(lasso_r2)
"""
/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/coordinate_descent.py:475:
ConvergenceWarning: Objective did not converge.
You might want to increase the number of iterations.
Duality gap: 0.15977488986227362, tolerance: 0.0027677457287885 positive
"""
이제 예측한 값들의 알스퀘어 값들을 구해보도록 하겠습니다.
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(5), ridge_result, '-x', c='blue', label="R2 of Ridge")
ax.plot(range(5), lasso_result, '-x', c='red', label="R2 of Lasso")
plt.xticks(range(5), alpha)
plt.xlabel('alpha')
plt.ylabel('R2')
plt.legend(loc='upper right')
plt.show()
릿지 모델의 값과 라쏘 모델의 값을 표현해보았습니다. 이 결과에서 릿지가 좀더 좋은 정확도를 나타내고 있다는 것을 알 수 있습니다.
반응형
'SW > 머신러닝' 카테고리의 다른 글
머신러닝 : 역사, 개념, 종류에 대해 알아보기 (0) | 2019.12.26 |
---|---|
머신러닝과 스마트 팩토리 : 정의와 관련 개념 (0) | 2019.12.25 |
python : 머신러닝 : KNN : 실습, 예제 (0) | 2019.11.25 |
머신 러닝에서 파이썬이 왜 그렇게 인기가 있을까요? (0) | 2019.11.02 |
머신러닝 : feature learning : 개념 (0) | 2019.10.08 |