scikit-learn 공식홈페이지
이곳으로 들어가면 바로 scikit-learn에서 제공하는 데이터셋의 종류들을 볼 수 있다.
예제 - 붓꽃 분류해보기
scikit-learn의 iris의 데이터에는 150개의 데이터가 들어있고, [sepal length, sepal width, petal length, petal width]형식으로 들어가 있다.
# (1) 필요한 모듈 import
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report
# (2) 데이터 준비
iris = load_iris()
iris_data = iris.data
iris_label = iris.target
# (3) train, test 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(iris_data,
iris_label,
test_size=0.2,
random_state=7)
# (4) 모델 학습 및 예측
decision_tree = DecisionTreeClassifier(random_state=32)
decision_tree.fit(X_train, y_train)
y_pred = decision_tree.predict(X_test)
print(classification_report(y_test, y_pred))
train_test_split
: scikit-learn에서 제공하는 데이터셋나누는 메소드
sklearn.metrics
: scikit-learn에서 성능 평가에 대한 함수들이 모여있는 패키지
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
accuracy # 0.9
0.9라는 수치는 90%의 정확도를 보인다는 뜻이다.
참고 사이트
https://ratsgo.github.io/machine%20learning/2017/03/26/tree/
scikit-learn이 제공하는 Decision Tree model
from sklearn.tree import DecisionTreeClassifier
decision_tree = DecisionTreeClassifier(random_state=32)
print(decision_tree._estimator_type)
decision_tree.fit(X_train, y_train)
y_pred = decision_tree.predict(X_test)
참고사이트
군중은 똑똑하다 — Random Forest
from sklearn.ensemble import RandomForestClassifier
X_train, X_test, y_train, y_test = train_test_split(iris_data,
iris_label,
test_size=0.2,
random_state=25)
random_forest = RandomForestClassifier(random_state=32)
random_forest.fit(X_train, y_train)
y_pred = random_forest.predict(X_test)
참고사이트
http://hleecaster.com/ml-svm-concept/
https://excelsior-cjh.tistory.com/66?category=918734
from sklearn import svm
svm_model = svm.SVC()
svm_model.fit(X_train, y_train)
y_pred = svm_model.predict(X_test)
from sklearn.linear_model import SGDClassifier
sgd_model = SGDClassifier()
sgd_model.fit(X_train, y_train)
y_pred = sgd_model.predict(X_test)
from sklearn.linear_model import LogisticRegression
logistic_model = LogisticRegression()
logistic_model.fit(X_train, y_train)
y_pred = logistic_model.predict(X_test)
정답과 오답을 구분하여 표현하는 방법을 오차행렬(confusion matrix)라고 한다.
오차행렬은 예측결과를 TN(True Negative), FP(False Positive), FN(False Negative), TP(True Positive)로 구분한다.
전체 개수 중 맞은 것의 개수의 수치
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
accuracy
정확도의 함정
정확도는 정답의 분포에 따라 모델의 성능을 잘 평가하지 못할 수 있다. (불균형한 데이터에서 많이 발생할 수 있다)
Recall과 Precision의 조화평균
Precision
Recall
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))
파이썬에서 표 형태로 이루어진 2차원 배열 데이터를 다루는 데에 가장 많이 쓰이는 도구
iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names)
iris_df
정답 데이터도 추가
iris_df["label"] = iris.target
iris_df