1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

「Scikit-learn」で「回帰」分析をする(続き)

Last updated at Posted at 2020-05-06

前回の記事で「Scikit-learn」で「回帰」分析をした結果、13.8053143であったが、これを改善したい

yのヒストグラムを確認する。

.py
plt.hist(train["y"])

1.png

trainXの予測値とyの散布図を確認する。

.py
result_trainX = model.predict(trainX)
plt.scatter(result_trainX,y)
plt.xlabel("result_trainX")
plt.ylabel("y")

2.png

trainXの予測値のヒストグラムを確認する。

.py
plt.hist(result_trainX)

3.png

(1)p値を調べて不要な入力変数を取り除く。

.py
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

4.png

p値は0.05以下だと入力変数は有意とされているので、trainXの火、水、金を取り除いてみる。

.py
# trainXの火、水、金を取り除いてみる
trainX.head()
trainX2 = trainX.drop(["","",""],axis=1)
trainX2.head()
# testXも、火、水、金を取り除いてみる
testX2 = testX.drop(["","",""],axis=1)
testX2.head()

モデルを定義する。

.py
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")

5.png

.py
sample[1] =result
sample.to_csv("submit9_kaiki.csv",header = None,index = None)

結果は12.7134081となり、少し精度が上がった

(2)yを標準化する

.py
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

モデルを定義する。

.py
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")

6.png

.py
sample[1] =result_365
sample.to_csv("submit10_kaiki.csv",header = None,index = None)

結果は12.7134081となり、正規化する前と変動なかった。

(3)yが正規分布ではなく指数分布なので対数化する

.py
plt.hist(y)

7.png

.py
log_y = np.log(y)
plt.hist(log_y)

8.png

モデルを定義する。

.py
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となり、微妙に精度が落ちた。

9.png

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?