인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

Inflearn Community Q&A

daemo944047's profile image
daemo944047

asked

[Revised Edition] The Complete Guide to Python Machine Learning

4.4 random forest에서 code 관련한 질문있습니다.

Resolved

Written on

·

254

0

------------------------------------------------------------------------------------------------------------------------

import pandas as pd

def get_human_dataset( ):

    

    feature_name_df = pd.read_csv('./human_activity/features.txt',sep='\s+',

                        header=None,names=['column_index','column_name'])

    feature_name = feature_name_df.iloc[:, 1].values.tolist()

    

    X_train = pd.read_csv('./human_activity/train/X_train.txt',sep='\s+', names=feature_name)

    X_test = pd.read_csv('./human_activity/test/X_test.txt',sep='\s+', names=feature_name)

    

    y_train = pd.read_csv('./human_activity/train/y_train.txt',sep='\s+',header=None,names=['action'])

    y_test = pd.read_csv('./human_activity/test/y_test.txt',sep='\s+',header=None,names=['action'])

    

    # 로드된 학습/테스트용 DataFrame을 모두 반환 

    return X_train, X_test, y_train, y_test

X_train, X_test, y_train, y_test = get_human_dataset()

------------------------------------------------------------------------------------------------------------------------

위와 같이 작성된 코드를 활용해 run 시켰는데 왜인지 모르겠는 아래와 같은 에러가 납니다. 어떻게 수정을 해야하는 것인가요?

-----------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-2-c35184a6df69> in <module>
     21 
     22 
---> 23 X_train, X_test, y_train, y_test = get_human_dataset()

<ipython-input-2-c35184a6df69> in get_human_dataset()
     10 
     11     # 학습 피처 데이터 셋과 테스트 피처 데이터을 DataFrame으로 로딩. 컬럼명은 feature_name 적용
---> 12     X_train = pd.read_csv('./human_activity/train/X_train.txt',sep='\s+', names=feature_name)
     13     X_test = pd.read_csv('./human_activity/test/X_test.txt',sep='\s+', names=feature_name)
     14 

~\Anaconda3\lib\site-packages\pandas\io\parsers.py in parser_f(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, dialect, error_bad_lines, warn_bad_lines, delim_whitespace, low_memory, memory_map, float_precision)
    683         )
    684 
--> 685         return _read(filepath_or_buffer, kwds)
    686 
    687     parser_f.__name__ = name

~\Anaconda3\lib\site-packages\pandas\io\parsers.py in _read(filepath_or_buffer, kwds)
    452 
    453     # Check for duplicates in names.
--> 454     _validate_names(kwds.get("names", None))
    455 
    456     # Create the parser.

~\Anaconda3\lib\site-packages\pandas\io\parsers.py in _validate_names(names)
    419     if names is not None:
    420         if len(names) != len(set(names)):
--> 421             raise ValueError("Duplicate names are not allowed.")
    422     return names
    423 

ValueError: Duplicate names are not allowed.
---------------------------------------------------------------------------------------------------------------------

코딩을 잘 몰라서 대략적으로는 '어떠한 이름자체가 중복되어 일어난일' 정도로 인지가 되는 데 어떤 부분을 수정해야하는 지 모르겠네요.

python통계머신러닝 배워볼래요?

Answer 1

1

dooleyz3525님의 프로필 이미지
dooleyz3525
Instructor

안녕하십니까,

판다스와 사이킷런 버전 업그레이드 따른 오류가 발생한 것입니다. 아래에 수강생 분들께 전체 공지한 내용을 참조 부탁드립니다.

==============================================================================================

파이썬 머신러닝 완벽 가이드를 수강해 주셔서 감사합니다.

아래와 같이 4장의 판다스와 사이킷런 버전 업그레이드에 따른 오류가 발생하여 4장의 2개 주피터 노트북 소스 코드를 변경하였습니다. 

1. 4장의 Human Activity Record 데이터 세트가 중복된 컬럼명을 가지고 있습니다. 판다스 버전이 업그레이됨에 따라 더 이상 중복된 컬럼명을 허용하지 않으므로 신 버전의 판다스에서는 Duplicate column 오류가 발생합니다.

이를 수정하기 위해서 get_new_feature_name_df() 를 새롭게 생성하고, 이를 get_human_dataset( )에서 이용하는 방식으로 소스코드를 변경하였습니다.

해당 소스코드는 4.2 결정 트리_Ver01.ipynb 과 4.3_앙상블학습_4.4_랜덤포레스트_4.5_GBM_Ver01.ipynb에 반영이 되어 있으며,  강의 소스코드가 위치한 https://github.com/chulminkw/PerfectGuide 의 4장 디렉토리 에서 확인하실 수 있습니다. (또는 https://github.com/chulminkw/PerfectGuide/tree/master/4%EC%9E%A5)

2. 사이킷런 버전이 업그레이드 되면서 아래의 GridSearchCV 객체의 cv_results_에서 mean_train_score는 더이상 제공되지 않게 되었습니다. 따라서 결정트리 예제의 소스코드를 변경합니다. 해당 소스코드는 4.2 결정 트리_Ver01.ipynb 에 반영이 되었습니다.

해당 변경 내역의 자세한 사항은 깃허브의  2019_10_27_노트북수정반영.txt 을 참조해 주시기 바랍니다.

daemo944047's profile image
daemo944047

asked

Ask a question