강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của appleskim5694
appleskim5694

câu hỏi đã được viết

[Làm gì sau giờ làm] Chứng chỉ Phân tích Dữ liệu lớn - Kỳ thi thực hành (Dạng bài tập 1, 2, 3)

Đề thi mẫu số 3 (Dạng thực hành 2)

T2-1

Đã giải quyết

Viết

·

752

0

안녕하세요 캐글 T2-1을 푸는 도중 도저히 에러를 해결할 수 없어 질문드립니다!ㅠㅠ코드는 가장 아래에 있습니다

  1. 데이터가 3개 주어지고 결측치가 있는 경우 제가 짠 코드와 같이 결측치를 채우면 될까요?

  2. 에러는 아래와 같이 나타납니다. test 데이터에 ‘Ali', 'Mr Ahmed'가 없다는 뜻같은데 무엇이 문제이고 어떻게 해결해야 좋을까요?ㅠㅠ

에러메시지, 코드:

KeyError                                  Traceback (most recent call last)
/opt/conda/lib/python3.7/site-packages/sklearn/preprocessing/_label.py in _encode_python(values, uniques, encode)
     65         try:
---> 66             encoded = np.array([table[v] for v in values])
     67         except KeyError as e:

/opt/conda/lib/python3.7/site-packages/sklearn/preprocessing/_label.py in <listcomp>(.0)
     65         try:
---> 66             encoded = np.array([table[v] for v in values])
     67         except KeyError as e:

KeyError: 'Ali, Mr. Ahmed'

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
/tmp/ipykernel_20/403961971.py in <module>
     53      le = LabelEncoder()
     54      X_train[col] = le.fit_transform(X_train[col])
---> 55      X_test[col] = le.transform(X_test[col])

/opt/conda/lib/python3.7/site-packages/sklearn/preprocessing/_label.py in transform(self, y)
    275             return np.array([])
    276 
--> 277         _, y = _encode(y, uniques=self.classes_, encode=True)
    278         return y
    279 

/opt/conda/lib/python3.7/site-packages/sklearn/preprocessing/_label.py in _encode(values, uniques, encode, check_unknown)
    111     if values.dtype == object:
    112         try:
--> 113             res = _encode_python(values, uniques, encode)
    114         except TypeError:
    115             types = sorted(t.__qualname__

/opt/conda/lib/python3.7/site-packages/sklearn/preprocessing/_label.py in _encode_python(values, uniques, encode)
     67         except KeyError as e:
     68             raise ValueError("y contains previously unseen labels: %s"
---> 69                              % str(e))
     70         return uniques, encoded
     71     else:

ValueError: y contains previously unseen labels: 'Ali, Mr. Ahmed'
# 시험환경 세팅 (코드 변경 X)
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split

def exam_data_load(df, target, id_name="", null_name=""):
    if id_name == "":
        df = df.reset_index().rename(columns={"index": "id"})
        id_name = 'id'
    else:
        id_name = id_name
    
    if null_name != "":
        df[df == null_name] = np.nan
    
    X_train, X_test = train_test_split(df, test_size=0.2, random_state=2021)
    
    y_train = X_train[[id_name, target]]
    X_train = X_train.drop(columns=[target])

    
    y_test = X_test[[id_name, target]]
    X_test = X_test.drop(columns=[target])
    return X_train, X_test, y_train, y_test 
    
df = pd.read_csv("../input/titanic/train.csv")
X_train, X_test, y_train, y_test = exam_data_load(df, target='Survived', id_name='PassengerId')

X_train.shape, X_test.shape, y_train.shape, y_test.shape



import pandas as pd

df = pd.concat([X_train,y_train['Survived']], axis = 1)
    
df['Age'] = df['Age'].fillna(df['Age'].median())
X_test['Age'] = X_test['Age'].fillna(df['Age'].median())

df['Cabin'] = df['Cabin'].fillna('N')
X_test['Cabin'] = X_test['Cabin'].fillna('N')

df['Embarked'] = df['Embarked'].fillna('S')
X_test['Embarked'] = X_test['Embarked'].fillna('S')

#print(df.isnull().sum())
#print(X_test.isnull().sum())
print(df.info())
print(X_test)
cols = ['Name','Sex', 'Ticket', 'Cabin', 'Embarked']
from sklearn.preprocessing import LabelEncoder
for col in cols:
     le = LabelEncoder()
     X_train[col] = le.fit_transform(X_train[col])
     X_test[col] = le.transform(X_test[col])
python머신러닝빅데이터pandas빅데이터분석기사

Câu trả lời 2

1

roadmap님의 프로필 이미지
roadmap
Người chia sẻ kiến thức

Name이 train과 test에 있는 종류가 같지 않습니다.

Name을 제외하거나

Name을 사용한다면 train과 test를 합쳐서 인코딩 하는 방법이 있습니다.

이름을 인코딩할 거라면 제외하는 것이 좋을 것 같아요!

appleskim5694님의 프로필 이미지
appleskim5694
Người đặt câu hỏi

아 drop을 먼저하니까 해결됐습니다! 감사합니다

0

appleskim5694님의 프로필 이미지
appleskim5694
Người đặt câu hỏi

강사님 해당문제 아래와 같이 코드를 짰고 결과값을 도출했습니다. 이정도 평가지표와 예측결과면 40점 받는데에 문제없을까요? 맨아래 사진이 코드이고 그 위의값들이 결과값입니다

0.839453284373725

[2]:

0.9876977152899824
# 시험환경 세팅 (코드 변경 X)
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split

def exam_data_load(df, target, id_name="", null_name=""):
    if id_name == "":
        df = df.reset_index().rename(columns={"index": "id"})
        id_name = 'id'
    else:
        id_name = id_name
    
    if null_name != "":
        df[df == null_name] = np.nan
    
    X_train, X_test = train_test_split(df, test_size=0.2, random_state=2021)
    
    y_train = X_train[[id_name, target]]
    X_train = X_train.drop(columns=[target])

    
    y_test = X_test[[id_name, target]]
    X_test = X_test.drop(columns=[target])
    return X_train, X_test, y_train, y_test 
    
df = pd.read_csv("../input/titanic/train.csv")
X_train, X_test, y_train, y_test = exam_data_load(df, target='Survived', id_name='PassengerId')

X_train.shape, X_test.shape, y_train.shape, y_test.shape



import pandas as pd


cols = ['Name', 'Cabin', 'Ticket']
for col in cols:
    X_train = X_train.drop(col, axis =1)
    X_test = X_test.drop(col, axis = 1)

X_train['Age'] = X_train['Age'].fillna(X_train['Age'].median())
X_test['Age'] = X_test['Age'].fillna(X_test['Age'].median())

X_train['Embarked'] = X_train['Embarked'].fillna('S')
X_test['Embarked'] = X_test['Embarked'].fillna('S')

#print(df.isnull().sum())
#print(X_test.isnull().sum())
#print(df.head())
#print(X_test)

cols = ['Sex','Embarked']
from sklearn.preprocessing import LabelEncoder
for col in cols:
     le = LabelEncoder()
     X_train[col] = le.fit_transform(X_train[col])
     X_test[col] = le.transform(X_test[col])

df = pd.concat([X_train,y_train['Survived']], axis = 1)

from sklearn.metrics import roc_auc_score
from sklearn.model_selection import train_test_split

X_train = X_train.drop('PassengerId', axis = 1)
X_test_id = X_test.pop('PassengerId')

X_tr, X_val, y_tr, y_val = train_test_split(X_train, y_train['Survived'], test_size = 0.2, random_state = 2023)

from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit(X_tr, y_tr)
pred = model.predict(X_val)
print(roc_auc_score(y_val, pred))

pred = model.predict(X_test)
submit = pd.DataFrame({'PassengerId': X_test_id, 'Survived': pred  })
submit.to_csv('0000.csv', index = False)
pd.read_csv('0000.csv')
model.score(X_tr, y_tr)

 

 

 

Hình ảnh hồ sơ của appleskim5694
appleskim5694

câu hỏi đã được viết

Đặt câu hỏi