import pandas as pd train = pd.read_csv("train.csv") test = pd.read_csv("test.csv") pd.set_option('display.max_columns', None) # print(train.head()) # print(test.head()) # print(train.info()) # print(test.info()) from sklearn.preprocessing import LabelEncoder cols = train.select_dtypes(include='object') le = LabelEncoder() for col in cols : train[col] = le.fit_transform(train[col]) test[col] = le.transform(test[col]) # print(train.head()) # print(train.info()) train = train.drop('Unnamed: 0',axis=1) test = test.drop('Unnamed: 0', axis=1) from sklearn.model_selection import train_test_split X_tr, X_val, y_tr, y_val = train_test_split(train.drop(['TravelInsurance'],axis=1),train['TravelInsurance'],test_size=0.2,random_state=0) # print(help(train_test_split)) from sklearn.ensemble import RandomForestClassifier rf = RandomForestClassifier() rf.fit(X_tr, y_tr) pred = rf.predict_proba(X_val) # print(pred) import lightgbm as lgb model = lgb.LGBMClassifier() model.fit(X_tr, y_tr) lgb_pred = model.predict_proba(X_val) from sklearn.metrics import roc_auc_score # print(roc_auc_score(y_val, pred[:, 1])) # print(roc_auc_score(y_val, lgb_pred[:, 1])) res = model.predict_proba(test) submit = pd.DataFrame({'index': test.index, 'y_pred': res[:, 1]}) submit.to_csv('950326.csv', index=False) print(pd.read_csv('950326.csv')) lightgbm을 randomforest와 비교해서 두 가지 정도만 준비해가려고 작업형 2를 다시 풀고있습니다. LightGBM을 쓰려고 하니 아래와 같은 오류가 발생했습니다. 'LightGBMError: Do not support special JSON characters in feature name.' 이게 혹시나 다운로드 파일의 'Unnamed: 0' 컬럼 때문인가 해서 drop해보고 코드를 작성하니 정상적으로 돌아가더군요. train = train.drop('Unnamed: 0',axis=1) test = test.drop('Unnamed: 0', axis=1) LightGBM은 컬럼에 특수문자가 있으면 안 되는 게 맞는지 확인 한 번만 부탁드립니다!
안녕하세요. 작업형2 모의문제1를 스스로 코딩하는 과정에서 발생한 오류를 해결하지 못하겠습니다.. 다음은 제가 작성한 코드파일입니다. 정확도, 정밀도, 재현율, F1 출력 시 오류가 발생한 것을 볼 수 있으며, 문제점을 파악하기 어렵습니다... 피드백 부탁드립니다.. 감사합니다.
<ipython-input-94-20cf5f2ccdef>:9: FutureWarning: Index.__or__ operating as a set operation is deprecated, in the future this will be a logical operation matching Series.__or__. Use index.union(other) instead. 문제를 풀고서 답을 구했는데 이런식으로 워닝메시지가 뜨는데요! 답은 정확히 똑같이 나왔는데 워닝메시지가 뜨면 시험 상황에서 혹시 코드를 고쳐야 할까요? 아니면 워닝 메시지가 나와도 답은 똑같이 출력되면 그냥 제출해도 상관이 없나요?
안녕하세요. 데이터 인코딩 관련하여 궁금한 점이 있어서 질문남기게 되었습니다. 선생님께서 알려주신대로, 인코딩을 필수로 진행하되, 라벨인코딩과 원핫인코딩은 선택하여 자유롭게 진행하여도 학습에 문제가 없다고 이해하였습니다. 예시문제를 라벨인코딩과 원핫인코딩으로 둘다 진행하던 중, 라벨인코딩시에는 X_train데이터와 X_test데이터의 컬럼 수가 동일하여 학습에 문제가 없었으나, 원핫인코딩을 진행하니 X_train데이터와 X_test 데이터의 컬럼 수가 달라져서 학습 시, 오류가 발생하는 점을 확인하였습니다. 어떤 점이 문제이며, 원핫인코딩을 이용하려고 한다면 어떻게 접근해야할지 여쭤볼 수 있을까요? 라벨인코딩 시 X_train, X_test의 shape => (3500,9), (2482,9) 원핫인코딩시 X_train,X_test의 shape => (3500,73), (2482,72) => 컬럼 수가 일치하지않아 학습 시, 에러 발생 import pandas as pd pd.set_option('display.max_columns',None) X_test = pd.read_csv("data/X_test.csv") X_train = pd.read_csv("data/X_train.csv") y_train = pd.read_csv("data/y_train.csv") # 사용자 코딩 # print(X_train.info(),X_test.info()) # 결측치 처리 # print(X_train.isnull().sum()) X_train['환불금액'] = X_train['환불금액'].fillna(0) X_test['환불금액'] = X_test['환불금액'].fillna(0) X_test_id = X_test.pop('cust_id') X_train = X_train.drop(['cust_id'],axis = 1) # 1. LabelEncoder cols = X_train.select_dtypes(include='object').columns from sklearn.preprocessing import LabelEncoder le = LabelEncoder() for col in cols: X_train[col] = le.fit_transform(X_train[col]) X_test[col] = le.transform(X_test[col]) print(X_train.shape,X_test.shape) # 2. one-hot Encoder X_train = pd.get_dummies(X_train) X_test = pd.get_dummies(X_test) print(X_train.shape,X_test.shape) X_train = X_train.drop('cust_id',axis =1) 과 X_train = X_train.drop(['cust_id'],axis =1) 를 각각 실행하였을 때, 에러없이 cust_id 컬럼이 동일하게 삭제되는 점을 확인했는데 혹시 drop시 컬럼명에 대괄호를 묶고 안묶고의 차이가 있을까요??
여러 가지 분석 모델이 존재하는데 (대표적으로 랜덤포레스트 그 외에도 xgboost, 디시젼트리, 로비스틱 회귀 등) 경우에 따라 다르겠지만 랜덤포레스트만 사용해도 될까요?(하이퍼파라미터 튜닝은 한다는 가정하에) 물론 여러 방법 해보면 정확도 높은 걸로 할 수 있어서 좋겠지만, 외우는게 부담인 것 같아서요 그리고 전처리 후에 라벨인코딩 vs 원핫인코딩 등 여러 방법이 있는데 어떤 상황에선 뭐로 하는게 좋다 이런 공식은 따로 없는 것일까요?
안녕하세요~ 선생님~ 드디어 강의를 다 듣고 시험 준비를 하기 위해 기출문제와 강의 내용을 다시 한 번 반복하고 있습니다. 그러던 중에 3회 기출유형(작업형2)에서 수치형 데이터와 범주형 데이터 분리를 위해 select_dtypes() 요 메소드를 쓰고 나서 다시 copy()를 하는 것에 대해 궁금해서 여쭙게 되었습니다. copy() 메소드를 더 붙이는 데에는 이유가 있을까요? 강의를 듣고 코드들을 숙지하면서 준비하니까 정말 강의 선택 잘 했다는 확인이 듭니다. 물론 붙는 건 또 별개의 문제겠지만… 아마 또 질문을 드리겠지만, 강의 정말 잘 들었다는 말씀 드립니다. ㅎ
검증 데이터 분리 파트에서 train_test_split([train.drop("TravelInsurance"),~~ 이렇게 설명을 해주셨는데 train_test_split(train.drop(['Unnamed: 0',"TravelInsurance"],~~ 이렇게 되어야 더 정확한 것이 아닐까요?? 궁금해서 여쭤봅니다!
5회 작업형 2번 질문입니다. 수치형 스케일링과 범주형 변수 원핫 인코딩은 같이 사용할 수 없나요 ? n_cols=['year', 'mileage', 'tax', 'mpg', 'engineSize'] train[n_cols]= scaler.fit _transform(train[n_cols]) test[n_cols]=scaler.transform(test[n_cols]) c_cols = ['model', 'transmission', 'fuelType' ] train=pd.get_dummies(train[c_cols]) test =pd.get_dummies(test[c_cols]) 이렇게 해버리면 수치형 데이터를 스케일링해도 해당 값이 사라지고, 원핫 인코딩된 데이터만 남습니다. 스케일링 코드를 뒤쪽으로 옮겨가도, 이미 사라진 수치형 데이터 컬럼명을 사용해서 에러가 뜹니다. 그리고 강의에서는 train = pd.get_dummies(train) test = pd.get_dummies(test) 으로 진행하고 수치형 데이터를 아예 스케일링 안하고 넘어가셨는데, 어떻게 판단해서 해야하나요?
안녕하세요! 답이 나오기는 하는데 이 copy warning은 뭘까요? 어떻게 해결할까요? # print(df.shape) line = int(len(df) * 0.8) df = df[:line] # df.shape # print(df.isnull().sum()) r1 = df['f1'].std() med = df['f1'].median() df['f1'] = df['f1'].fillna(med) # df.isnull().sum() r2 = df['f1'].std() abs(r1 - r2) <ipython-input-47-f10e742b8062>:10: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy df['f1'] = df['f1'].fillna(med) 3.564064430008667
작업형2 회귀문제인지, 분류문제인지 처음에 판별하는게 중요하다고 했는데, f1 score, roc auc로 평가한다는 조건이 있으면 분류문제 rsme 같은 걸로 평가한다는 조건이 있으면 회귀문제일까요 ? 혹은 id / 타겟값 이면 분류문제, 하나의 값만 제출하는 것이면 회귀문제일까요 ? 궁금합니다
안녕하세요. 작업형1 모의문제3의 문제9번 질문드리고자 합니다. 강사님께서 판다스의 datetime을 활용하여 풀어주셨는데 혹시 'subscribed'를 슬라이싱하여 년/ 월/일 컬럼을 만들어 풀이하는 방법도 알 수 있을까요? 해보려고 하는데 자꾸 오류가 발생하여 여쭤봅니다 ㅠㅠ