AIB Section2. n 213ブリッジ回帰(02/24)
3631 ワード
Ridge Regression One-hot encording
カテゴリ 名目型=無秩序strデータ
、一意の値は、1回の熱符号化によって0および1に変換される州 シーケンス型と混同されやすい. 種類が多すぎると使いにくいです. 関連性-> を考えてみましょう
シーケンス型 の特性を選択することは,課題に適した特性を創造する過程である.
ブリッジ回帰既存の線形回帰に調整パラメータを追加
Ridge回帰このオフセットを大きくして小さくすることで
「正規化」(Regularization)を実行します.ここでいう正規化.
モデルを変形することによってオーバーフィットを緩和し,汎用性を向上させる方法.
ランダの増加に伴い、正規化はゼロに近い. 振り返る
1. One-hot encording
2. Feature selection
3. Ridge regression
1. One-hot encordingカテゴリ
#코드
#판다스 프로파일링 다운
!pip install -U pandas-profiling
#데이터 프로파일링 (카테고리 데이터 찾기)
df.profile_report()
#인코더 다운
!pip install category_encoders
#원핫 인코더 불러오기
from category_encoders import OneHotEncoder
from sklearn.model_selection import train_test_split
#원핫인코딩
encoder = OneHotEncoder(use_cat_names = True)
train = encoder.fit_transform(df)
test = encoder.transform(df)
#훈련, 테스트 데이터 나누기
x_train, x_test = train_test_split(
train, test_size=0.2, train_size=0.8, random_state=2
)
#타겟, 피쳐 나누기
y_train = x_train['target]
x_train = x_train.drop('target', axis = 1)
#test 피쳐, 타겟나누기
y_test = x_test['target]
x_test = x_test.drop('target', axis = 1)
2. Feature selection#코드
from sklearn.feature_selection import f_regression, SelectKBest
#셀렉터 지정(f검정 기준, 20개 선택)
selector = SelectKBest(score_func=f_regression, k=20)
#훈련데이터
X_train_selected = selector.fit_transform(x_train, y_train)
#테스트 데이터
X_test_selected = selector.transform(x_test)
#특성 전체 이름
all_names = x_train.columns
# selector.get_support()(선택된 특성을 bool로 나타내줌)
selected_mask = selector.get_support()
## 선택된 특성들
selected_names = all_names[selected_mask]
## 선택되지 않은 특성들
unselected_names = all_names[~selected_mask]
#feature list화
kss=[]
for i in selected_names:
kss.append(i)
#k=20 훈련데이터, 테스트데이터 만들기
x_train = x_train[kss]
x_test = x_test[kss]
3. Ridge regressionブリッジ回帰既存の線形回帰に調整パラメータを追加
Ridge回帰このオフセットを大きくして小さくすることで
「正規化」(Regularization)を実行します.ここでいう正規化.
モデルを変形することによってオーバーフィットを緩和し,汎用性を向上させる方法.
ランダの増加に伴い、正規化はゼロに近い.
#코드
# sklearn 버전 확인 -> 0.23보다 낮다면 재설치 진행.
import sklearn
sklearn.__version__
# sklearn 재설치
!pip uninstall scikit-learn -y
!pip install -U scikit-learn
# sklearn 버전 재확인 -> 0.23 이상으로 설치되었는지 확인
import sklearn
sklearn.__version__
#from sklearn.linear_model import RidgeCV
from warnings import simplefilter
simplefilter(action='ignore', category=FutureWarning)
#람다설정
alphas = [0, 0.001, 0.01, 0.1, 1]
#릿지회귀
ridge = RidgeCV(alphas=alphas,normalize=True, cv=5)
ridge.fit(x_train, y_train)
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
X_total = pd.concat([x_train, x_test])
y_total = pd.concat([y_train, y_test])
def RidgeCVRegression(degree=3, **kwargs):
return make_pipeline(PolynomialFeatures(degree),
RidgeCV(**kwargs))
# 모든 데이터를 사용해 최종 모델을 만듭니다.
model = RidgeCVRegression(alphas=alphas, normalize=True, cv=5)
model.fit(X_total, y_total)
coefs = model.named_steps["ridgecv"].coef_
print(f'Number of Features: {len(coefs)}')
print(f'alpha: {model.named_steps["ridgecv"].alpha_}')
print(f'cv best score: {model.named_steps["ridgecv"].best_score_}')
오늘 많이 힘들었다. 하지만 많은 것을 배운 하루였다.
릿지회귀와 특성선택, 원핫인코딩에 대해서 배웠다.
원핫 인코딩은 이해하기 쉬웠다. 범주형을 0,1인 데이터로
바꿔주는 것이기떄문이다. 특성선택은 좀 더 공부해야겠다.
릿지회귀도 좀 더 공부해야겠다. 정말 재밌다 진짜 재밌다.
더 열심히 해서 쉽고 재밌게 느끼게 만들고 싶다.
일단 더 복습하는 것이 중요할 것 같다.
Reference
この問題について(AIB Section2. n 213ブリッジ回帰(02/24)), 我々は、より多くの情報をここで見つけました https://velog.io/@seogury/AIB-Section2.-n213-릿지회귀0224テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol