23.11.20 13:01 작성
·
552
0
from scipy.special import boxcox1p
from scipy.stats import boxcox_normmax
# 왜도가 1보다 높은 수치형 변수를 출력하는 코드
high_skew = skewness_features[skewness_features > 1]
high_skew_index = high_skew.index
print("The data before Box-Cox Transformation: \n", all_df[high_skew_index].head())
# boxcox를 변환하는 코드
for num_var in high_skew_index:
all_df[num_var] = boxcox1p(all_df[num_var], boxcox_normmax(all_df[num_var] + 1))
print("The data after Box-Cox Transformation: \n", all_df[high_skew_index].head())
위와 같이 코드를 실행시켰을 때 다음과 같은 에러가 발생하였습니다.
<ipython-input-72-7b0af0216c6e> in <cell line: 11>()
10 # boxcox를 변환하는 코드
11 for num_var in high_skew_index:
---> 12 all_df[num_var] = boxcox1p(all_df[num_var], boxcox_normmax(all_df[num_var] + 1))
13
14 print("The data after Box-Cox Transformation: \n", all_df[high_skew_index].head())
BracketError: The algorithm terminated without finding a valid bracket. Consider trying different initial points.
답변 2
0
2023. 11. 20. 14:47
변경된 코드입니다.
from scipy.stats import boxcox_normmax, boxcox
# 왜도가 1보다 높은 수치형 변수를 출력하는 코드
high_skew = skewness_features[skewness_features > 1]
high_skew_index = high_skew.index
print("The data before Box-Cox Transformation: \n", all_df[high_skew_index].head())
# print(all_df[high_skew_index].info())
# boxcox를 변환하는 코드
for num_var in high_skew_index:
lmbda = boxcox_normmax(all_df[num_var] + 1, method='mle')
# Apply the Box-Cox transformation
all_df[num_var] = boxcox(all_df[num_var] + 1, lmbda=lmbda)
print("The data after Box-Cox Transformation: \n", all_df[high_skew_index].head())
에러 없이 잘 되는지 확인 부탁드립니다.
2023. 11. 20. 17:46
아니요, scipy 버전 차이가 존재합니다. 기존에는 method 사용법이 없었는데, 좀 더 구분하기 위해서 여러 method를 추가한 것으로 보여집니다. mle 대신 pearson 또는 all 로 변경하면 에러가 발생할 것입니다. 상황에 따라서 변경해주셔야 할 듯 합니다.