ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [scikit-learn] Iris 데이터를 이용한 머신러닝_KNN
    AI 2020. 2. 20. 23:47

    scikit-learn(사이킷런)

    사이킷런이란?

    • 파이썬을 이용한 머신러닝 라이브러리 중 하나로, 분류, 회귀, 군집화 등 다양한 머신러닝 알고리즘 함수를 제공한다.

     

    설치

    pip install scikit-learn

     

    설치 확인

    import sklearn
    
    sklearn.__version__

     

     

    Iris 데이터

    • 사이킷런에는 내장된 데이터가 몇가지 있다.
    • 그중 하나로 Iris(붓꽃)에 관한 데이터가 있다.
    • 이를 이용해서 사이킷런의 사용법에 대해 공부를 해보자.

     

     

    Iris 데이터 불러오기

    from sklearn.datasets import load_iris

     

     

    Iris 데이터 확인해보기

    • Iris 데이터를 변수에 할당한 후 데이터의 key와 value를 확인해보기
    iris_dataset = load_iris()
    print(f"iris_dataset key: {iris_dataset.keys()}")

     

    iris_dataset key: dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename'])
    • Iris 데이터를 자세히 알아보기 위해서 key를 이용해서 value를 확인해보자.
    • 이렇게 무언가를 하기 전 데이터에 대해 자세히 알아보는 것은 중요하다.

     

     

    Iris 데이터의 value 확인해보기

    print(iris_dataset['data'])
    print(f"shape of data: {iris_dataset['data'].shape}")
    print(iris_dataset['feature_names'])
    print(iris_dataset['target'])
    print(iris_dataset['target_names'])
    print(iris_dataset['DESCR'])

     

     

    사이킷런을 이용한 데이터 분리하기

    from sklearn.model_selection import train_test_split
    
    train_input, test_input, train_label, test_label = train_test_split(
    	iris_dataset['data'], iris_dataset['target'], test_size=0.25, random_state=42
        )
    • train_test_split() 함수의 인자로
    • 나누고 싶은 데이터를 넣기(데이터값, 타겟값)
    • 평가 데이터의 크기 설정(test_size)
    • 무작위로 데이터가 선택되는 것을 제어(random_state)

     

     

    분리된 데이터 확인하기

    print(f"shape of train_input: {train_input.shape}")
    print(f"shape of test_input: {test_input.shape}")
    print(f"shape of train_label: {train_label.shape}")
    print(f"shape of test_label: {test_label.shape}")

     

    shape of train_input: (112, 4)
    shape of test_input: (38, 4)
    shape of train_label: (112,)
    shape of test_label: (38,)

     

    지금까지 데이터에 대해 알아보았다.

    이제 사이킷런을 이용한 지도학습을 해보자

    여러 지도학습 중에서 여기서는 KNN을 사용해 봤다.

     

     

    K-nearest neighbor classifier(k-최근접 이웃 분류기)

    • 예측하고자 하는 데이터에 대해 가장 가까운 거리에 있는 데이터의 라벨과 같다고 예측하는 방법
    • k 값은 예측하고자 하는 데이터와 가까운 몇 개의 데이터를 참고할 것인지를 의미한다.

     

     

    사이킷런의 KNN 불러오기

    from sklearn.neighbors import KNeighborsClassifier
    
    knn = KNeighborsClassifier(n_neighbors=1)
    • 여기서 n_neighbors는 k 값을 의미하는 것으로 1의 값을 주었다.

     

     

    생성한 분류기에 학습 데이터를 적용하기

    knn.fit(train_input, train_label)

     

    KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
                               metric_params=None, n_jobs=None, n_neighbors=1, p=2,
                               weights='uniform')

     

     

    평가데이터를 이용해서 결과 라벨값을 예측해보기

    predict_label = knn.predict(test_input)
    print(predict_label)

     

     

    정확도 확인하기

    import numpy as np
    
    print(f"test accuracy: {np.mean(predict_label == test_label)}")
    • 마지막으로 예측을 통해 나온 라벨값과 실제 라벨값을 비교해서 예측이 얼마나 정확히 되었는지 확인해본다.

     

     

     

     

     

     

     


    참고

    텐서플로와 머신러닝으로 시작하는 자연어 처리_위키북스

    책 github: https://github.com/NLP-kr/tensorflow-ml-nlp

    my github: https://github.com/Lagom92/TIL/blob/master/AI/scikit-learn.ipynb

     

     

    'AI' 카테고리의 다른 글

    교차 검증(Cross validation)  (0) 2020.08.21
    [scikit-learn] Iris 데이터를 이용한 머신러닝_Kmeans  (0) 2020.02.25
    파이썬으로 xlsx 파일과 csv 파일 다루기  (0) 2019.09.18
    pickle 모듈  (0) 2019.08.21
    Mean squared error  (0) 2019.08.21

    댓글

© 2019 All rights reserved.