작성
·
7.8K
0
선생님! 소스코드 pipe.fit(x.reshape(-1,1),y) 이 부분에서
'numpy.ndarray' object has no attribute 'fit' 이런 오류가 떠요.
나머지 부분들은 다 교재와 똑같이 썼는데, 왜 이런 오류가 떳는지 모르겠습니다..
동영상 06:09분 입니다.
답변 4
0
0
0
import matplotlib.pyplot as plt
from sklearn.pipeline import Pipeline
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
import numpy as np
from sklearn.metrics import mean_squared_error, r2_score
%matplotlib inline
def true_fun(x):
return np.cos(1.5 *np.pi * x)
# random 값으로 구성된 X값에 대해 Cosine 변환값을 반환
np.random.seed(0)
n_samples=30
x=np.sort(np.random.rand(n_samples))
y=true_fun(x)+np.random.randn(n_samples)*0.1
plt.figure(figsize=(14,5))
degrees=[1,4,15]
for i in range(len(degrees)):
ax=plt.subplot(1,len(degrees),i+1)
plt.setp(ax,xticks=(),yticks=())
# 개별 degree별로 polynomial 변환합니다.
polynomial_features=PolynomialFeatures(degree=degrees[i],include_bias=False) # 상수항 포함 X
linear_regression=LinearRegression()
pipe=Pipeline([('polynomial_features',PolynomialFeatures),('linear_regression',LinearRegression)])
pipe.fit(x.reshape(-1,1),y)
scores=cross_val_score(pipe,x.reshape(-1,1),y,scoring='neg_mean_squared_error',cv=10)
#pipeline을 구성하는 세부 객체를 접근하는 named_steps['객체명']을 이용해 회귀계수 추출
coefficients=pipe.named_steps['linear_regression'].coef_
print("\n Degree {0} 회귀 계수는 {1} 입니다.".format(degrees[i],np.round(coefficients,2)))
print('\n Degree {0} MSE는 {1}입니다.'.format(degrees[i],-1*np.mean(scores)))
# 0부터 1까지 테스트 데이터 세트를 100개로 나눠 예측을 수행합니다.
# 테스트 데이터 세트에 회귀 예측을 수행하고 예측 곡선과 실제 곡선을 그려서 비교합니다.
X_test=np.linspace(0,1,100)
# 예측값 곡선
plt.plot(X_test,pipe.predict(X_test[:,np.newaxis]),label="Model")
# 실제값 곡선
plt.plot(X_test.true_fun(X_test),'--',label="True function")
plt.scatter(X,y,edgecolor='b',s=20,label="Samples")
plt.xlabel("X");plt.ylabel("y");plt.xlim((0,1));plt.ylim((-2,2));plt.legend(loc='best') # 최적의 위치에 범례 위치시킴
plt.title("Degree {}\nMSE={:.2e}(+/-{:.2e})".formate(degrees[i],-scores.mean(),scores.std()))
plt.show()
0