saru_da_mon
私のモデルで、効果のあった特徴量を紹介します。
降水量のカラムに対し以下の関数を使用し特徴量生成しました。
def zero_count(df,alpha=0.005):
df_count = []
n_count = 0
for i in range(len(df)):
if df[i] < 0.5:
n_count += 1
else:
n_count = 0
df_count.append(n_count)
df_count = np.tanh(np.array(df_count)*alpha)
return df_count
tanuking0
面白いシェアありがとうございます。とても勉強になりました。
お返しと言うには、あんまり寄与が安定しない&当たり前の変換ですが、こういう風力変換しています。45度ずらしても面白いかなぁとも思います。
def wind_vecs():
level = [0, #関係ない角度
math.cos(math.radians(67.5)), #北にとって東北東など
math.cos(math.radians(45)), #北にとって北東など
math.cos(math.radians(22.5)), #北にとって北北東など
1, #北にとって北
]
vecs = [
[0,level[0],level[0],level[0],level[0],],#0:静穏
[1,level[3],level[1],level[0],level[0]],#1:北北東
[2,level[2],level[2],level[0],level[0]],#2:北東
[3,level[1],level[3],level[0],level[0]],#3:東北東
[4,level[0],level[4],level[0],level[0]],#4:東
[5,level[0],level[3],level[1],level[0]],#5:東南東
[6,level[0],level[2],level[2],level[0]],#6:南東
[7,level[0],level[1],level[3],level[0]],#7:南南東
[8,level[0],level[0],level[4],level[0]],#8:南
[9,level[0],level[0],level[3],level[1]],#9:南南西
[10,level[0],level[0],level[2],level[2]],#10:南西
[11,level[0],level[0],level[1],level[3]],#11:西南西
[12,level[0],level[0],level[0],level[4]],#12:西
[13,level[1],level[0],level[0],level[3]],#13:西北西
[14,level[2],level[0],level[0],level[2]],#14:北西
[15,level[3],level[0],level[0],level[1]],#15:北北西
[16,level[4],level[0],level[0],level[0]],#16:北
]
vecs = pd.DataFrame(vecs)
vecs.columns = ["w_direc", "vec_n","vec_e","vec_s","vec_w",]
return vecs
X = pd.merge(X, wind_vecs(), on="w_direc", how="left")#onのカラムは適当に書き換える
for vecs in ["vec_n", "vec_e", "vec_s", "vec_w",]:
X[vecs] *= X["w_speed"]