본문 바로가기
Study/머신러닝

[5] 머신러닝 - 판다스 기초(4)와 사이킷런

by 투말치 2021. 6. 1.

목차

    반응형

    ▶lambda 식으로 데이터 가공

    판다스는 apply 함수에 lambda 식을 결합해 데이터를 가공하는 기능을 제공한다.

     

    예제를 통해 lambda 식이 어떻게 사용되는지 알아보자.

    Name 칼럼의 문자열 개수를 Name_len이라는 칼럼에 넣어보자.

    titanic_df['Name_len']= titanic_df['Name'].apply(lambda x : len(x))
    titanic_df[['Name','Name_len']].head(3)

    잘 추가된 모습을 볼 수 있다.

     

    lambda 식에 if else를 사용해서 복잡하게 가공할 수 있다.

    나이가 15 이하면 child, 넘으면 adult로 구분하게 했다.

    titanic_df['Child_Adult'] = titanic_df['Age'].apply(lambda x : 'Child' if x <=15 else 'Adult' )
    titanic_df[['Age','Child_Adult']].head(8)

     

     

     

    사이킷런으로 붓꽃 품종 예측하기

    붓꽃 품종을 예측하는 것은 지도학습 방법 중 하나인 분류에 해당한다. 정답이 주어진 데이터를 학습하고 테스트 데이터 셋으로 정답을 예측한다.

    # 붓꽃 데이터 세트를 로딩합니다. 
    iris = load_iris()
    
    # iris.data는 Iris 데이터 세트에서 피처(feature)만으로 된 데이터를 numpy로 가지고 있습니다. 
    iris_data = iris.data
    
    # iris.target은 붓꽃 데이터 세트에서 레이블(결정 값) 데이터를 numpy로 가지고 있습니다. 
    iris_label = iris.target
    print('iris target값:', iris_label)
    print('iris target명:', iris.target_names)
    
    # 붓꽃 데이터 세트를 자세히 보기 위해 DataFrame으로 변환합니다. 
    iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names)
    iris_df['label'] = iris.target
    iris_df.head(3)

     우선 붓꽃 데이터를 로딩하고 데이터를 확인하기 위해 dataFrame으로 변환한다.

     

    출력값은 위와 같다.

    특징은 sepal length, sepal width, petal length, petal width가 있는 것을 알 수 있다.

    label은 0이 setosa, 1이 versicolor, 2가 virginica다.

     

    본격적으로 모델을 학습시키기 전에 학습 데이터와 테스트 데이터를 분리해보자.

    사이킷런에서 제공하는 train_test_split()을 사용해 분리할 수 있다.

    X_train, X_test, y_train, y_test = train_test_split(iris_data, iris_label, 
                                                        test_size=0.2, random_state=11)

    함수의 첫번째 파라미터로는 피처 데이터셋, 두번째 파라미터는 레이블 데이터 셋이 들어간다.

    test_size 파라미터는 테스트 데이터의 비율을 의미한다. 따라서 이 경우에는 테스트 데이터는 20%, 학습 데이터는 80%로 분할한다는 뜻이다.

    random_state는 호출할 때마다 같은 학습/테스트 데이터 셋을 생성하기 위한 난수 발생 값이다.

    만약 random_state를 지정하지 않으면 수행할 때마다 다른 학습/테스트 데이터 셋이 만들어진다.

     

    이제 분리한 학습 데이터를 의사 결정 트리를 이용해 학습과 예측을 해보자.

    우선 사이킷런의 의사 결정 트리 클래스인 DecisionTreeClassifier를 객체로 생성해야 한다. 

    그 다음에는 fit() 함수를 사용해 학습을 한다.

    # DecisionTreeClassifier 객체 생성 
    dt_clf = DecisionTreeClassifier(random_state=11)
    
    # 학습 수행 
    dt_clf.fit(X_train, y_train)

     

    학습이 다 되면 학습 완료된 객체를 활용해서 예측을 하면 된다.

    예측은 predict() 함수를 사용한다.

    # 학습이 완료된 DecisionTreeClassifier 객체에서 테스트 데이터 세트로 예측 수행. 
    pred = dt_clf.predict(X_test)

     

    예측 성능을 평가하기 위해 정확도를 측정해보자.

    정확도 측정은 accuracy_score() 함수를 사용하면 된다. 

    from sklearn.metrics import accuracy_score
    print('예측 정확도: {0:.4f}'.format(accuracy_score(y_test,pred)))

     

     

     

     

     

    출처

    책 - 파이썬 머신러닝 완벽 가이드

    반응형