본문 바로가기
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)))

 

 

 

 

 

출처

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

반응형