'Scikit-learn'에서 '회귀' 분석하기(계속)
13694 단어 scikit-learn초보자MachineLearning
이전 기사에서 'Scikit-learn'에서 '회귀' 분석을 한 결과 13.8053143이었지만 이를 개선하고 싶다
y의 히스토그램을 확인합니다.
plt.hist(train["y"])
trainX의 예측값과 y의 산점도를 확인한다.
result_trainX = model.predict(trainX)
plt.scatter(result_trainX,y)
plt.xlabel("result_trainX")
plt.ylabel("y")
trainX 예측값의 히스토그램을 확인합니다.
plt.hist(result_trainX)
(1) p-값을 조사하여 불필요한 입력 변수를 제거한다.
from sklearn.feature_selection import f_regression
p_value = f_regression(trainX,y)[1]
p_value.round(3)
#array([0.493, 0.016, 0. , 0.881, 0.505, 0.118, 0.973, 0.976, 0.095,0.872, 0. ])
t = trainX.columns
p1 = pd.DataFrame(p_value.round(3))
p2 = pd.DataFrame(t)
p3 = pd.concat([p1,p2],axis = 1)
p3
p값은 0.05 이하라면 입력 변수는 유의하다고 되어 있으므로, trainX의 불, 물, 금을 제거해 본다.
#trainXの火、水、金を取り除いてみる
trainX.head()
trainX2 = trainX.drop(["火","水","金"],axis=1)
trainX2.head()
#testXも、火、水、金を取り除いてみる
testX2 = testX.drop(["火","水","金"],axis=1)
testX2.head()
모델을 정의한다.
model2 = LR()
model2.fit(trainX2,y)
result = model2.predict(testX2)
result_trainX2 = model2.predict(trainX2)
plt.scatter(result_trainX2,y)
plt.xlabel("result_trainX2")
plt.ylabel("y")
sample[1] =result
sample.to_csv("submit9_kaiki.csv",header = None,index = None)
결과는 12.7134081이 되어 조금 정밀도가 올랐다.
(2) y를 표준화한다
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(trainX2)
trainX2_scaled = scaler.transform(trainX2)
trainX2_scaled = pd.DataFrame(trainX2_scaled)
trainX2_scaled
#testXも同様にする
testX2_scaled = scaler.transform(testX2)
testX2_scaled = pd.DataFrame(testX2_scaled)
testX2_scaled
모델을 정의한다.
model3 = LR()
model3.fit(trainX2_scaled,y)
result_365 = model3.predict(testX2_scaled)
result_trainX2_scaled = model3.predict(trainX2_scaled)
plt.scatter(result_trainX2_scaled,y)
plt.xlabel("result_trainX2_scaled")
plt.ylabel("y")
sample[1] =result_365
sample.to_csv("submit10_kaiki.csv",header = None,index = None)
결과는 12.7134081이었고 정규화하기 전과 변동하지 않았다.
(3) y가 정규 분포가 아닌 지수 분포이므로 대수화
plt.hist(y)
log_y = np.log(y)
plt.hist(log_y)
모델을 정의한다.
model4 = LR()
model4.fit(trainX2_scaled,log_y)
result_365 = model4.predict(testX2_scaled)
result_trainX2_scaled = model4.predict(trainX2_scaled)
plt.scatter(result_trainX2_scaled,y)
plt.xlabel("result_trainX2_scaled")
plt.ylabel("y")
결과는 13.2649969가 되어 미묘하게 정밀도가 떨어졌다.
Reference
이 문제에 관하여('Scikit-learn'에서 '회귀' 분석하기(계속)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kaonashikun/items/5191fee8127473ed6e9b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
plt.hist(train["y"])
result_trainX = model.predict(trainX)
plt.scatter(result_trainX,y)
plt.xlabel("result_trainX")
plt.ylabel("y")
plt.hist(result_trainX)
from sklearn.feature_selection import f_regression
p_value = f_regression(trainX,y)[1]
p_value.round(3)
#array([0.493, 0.016, 0. , 0.881, 0.505, 0.118, 0.973, 0.976, 0.095,0.872, 0. ])
t = trainX.columns
p1 = pd.DataFrame(p_value.round(3))
p2 = pd.DataFrame(t)
p3 = pd.concat([p1,p2],axis = 1)
p3
p값은 0.05 이하라면 입력 변수는 유의하다고 되어 있으므로, trainX의 불, 물, 금을 제거해 본다.
#trainXの火、水、金を取り除いてみる
trainX.head()
trainX2 = trainX.drop(["火","水","金"],axis=1)
trainX2.head()
#testXも、火、水、金を取り除いてみる
testX2 = testX.drop(["火","水","金"],axis=1)
testX2.head()
모델을 정의한다.
model2 = LR()
model2.fit(trainX2,y)
result = model2.predict(testX2)
result_trainX2 = model2.predict(trainX2)
plt.scatter(result_trainX2,y)
plt.xlabel("result_trainX2")
plt.ylabel("y")
sample[1] =result
sample.to_csv("submit9_kaiki.csv",header = None,index = None)
결과는 12.7134081이 되어 조금 정밀도가 올랐다.
(2) y를 표준화한다
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(trainX2)
trainX2_scaled = scaler.transform(trainX2)
trainX2_scaled = pd.DataFrame(trainX2_scaled)
trainX2_scaled
#testXも同様にする
testX2_scaled = scaler.transform(testX2)
testX2_scaled = pd.DataFrame(testX2_scaled)
testX2_scaled
모델을 정의한다.
model3 = LR()
model3.fit(trainX2_scaled,y)
result_365 = model3.predict(testX2_scaled)
result_trainX2_scaled = model3.predict(trainX2_scaled)
plt.scatter(result_trainX2_scaled,y)
plt.xlabel("result_trainX2_scaled")
plt.ylabel("y")
sample[1] =result_365
sample.to_csv("submit10_kaiki.csv",header = None,index = None)
결과는 12.7134081이었고 정규화하기 전과 변동하지 않았다.
(3) y가 정규 분포가 아닌 지수 분포이므로 대수화
plt.hist(y)
log_y = np.log(y)
plt.hist(log_y)
모델을 정의한다.
model4 = LR()
model4.fit(trainX2_scaled,log_y)
result_365 = model4.predict(testX2_scaled)
result_trainX2_scaled = model4.predict(trainX2_scaled)
plt.scatter(result_trainX2_scaled,y)
plt.xlabel("result_trainX2_scaled")
plt.ylabel("y")
결과는 13.2649969가 되어 미묘하게 정밀도가 떨어졌다.
Reference
이 문제에 관하여('Scikit-learn'에서 '회귀' 분석하기(계속)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kaonashikun/items/5191fee8127473ed6e9b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(trainX2)
trainX2_scaled = scaler.transform(trainX2)
trainX2_scaled = pd.DataFrame(trainX2_scaled)
trainX2_scaled
#testXも同様にする
testX2_scaled = scaler.transform(testX2)
testX2_scaled = pd.DataFrame(testX2_scaled)
testX2_scaled
model3 = LR()
model3.fit(trainX2_scaled,y)
result_365 = model3.predict(testX2_scaled)
result_trainX2_scaled = model3.predict(trainX2_scaled)
plt.scatter(result_trainX2_scaled,y)
plt.xlabel("result_trainX2_scaled")
plt.ylabel("y")
sample[1] =result_365
sample.to_csv("submit10_kaiki.csv",header = None,index = None)
plt.hist(y)
log_y = np.log(y)
plt.hist(log_y)
model4 = LR()
model4.fit(trainX2_scaled,log_y)
result_365 = model4.predict(testX2_scaled)
result_trainX2_scaled = model4.predict(trainX2_scaled)
plt.scatter(result_trainX2_scaled,y)
plt.xlabel("result_trainX2_scaled")
plt.ylabel("y")
Reference
이 문제에 관하여('Scikit-learn'에서 '회귀' 분석하기(계속)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kaonashikun/items/5191fee8127473ed6e9b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)