Scikit-learn

park paul·2021년 8월 21일
0
post-custom-banner

About

파이썬 머신러닝 라이브러리
머신러닝 기술을 활용하는 데 필요한 다양한 기능을 제공하며, 머신러닝 모델을 만들 수 있는 최적의 라이브러리다.
딥러닝 모델을 Tensor flow, Keras, Pytorch 등을 이용해 생성할 수 있는 것처럼 머신러닝 모델은 주로 Scikit-learn 라이브러리를 통해 만들어 낼 수 있다.

사이킷런 라이브러리는 다음과 같은 모듈로 사용할 수 있다.

지도학습(Supervised Learning)

학습을 위한 다양한 feature와 label데이터로 모델을 학습한 뒤, 별도의 테스트 데이터셋에서 미지의 label을 예측한다. 다시 말해 답이 주어진 데이터 셋을 학습 시켜놓고 미지의 정답을 예측하는 방식이다.

  • Naive Bayes
  • Decision Trees
  • Support Vector Machines

비지도학습

  • Clustering
  • Gaussian mixture models

모델 선택 및 평가 모듈

  • Cross validation
  • Model evaluation

데이터 변환 모듈

  • Pipeline
  • Feature extraction
  • preprocessing data
  • dimensionality reduction

데이터를 불러오기 위한 모듈

올바른 알고리즘 선택을 위한 지도

데이터 분리(iris data)

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)

사이키런으로 지도학습

K-nearest neighbor classifier

K=1이면 예측하고자 하는 데이터에서 가장 가까운 데이터 하나만 참고해서 그 데이터와 같은 라벨이라고 예측하고, K=3이면 가장 가까운 데이터 3개를 참고하게 된다.

  • 특징
  • 데이터의 대한 가정이 없어 심플

  • 다목적 분류와 회귀에 좋다

  • 높은 메모리 사용

  • K값이 증가하면 계산이 오래 걸림

  • 관련 없는 기능의 데이터의 규모에 민감

    how to use

    from sklearn.neighbors import KNeighborsClassifier

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

    #새로운 4개의 피쳐값으로 넘파이 배열을 만들어 모델에 적용하여 라벨을 예측해보기
    newInput = np.array([[6.1, 2.8, 4.7, 1.2]])
    knn.predict(new_input)
    array([1])
    #하지만 이것은 임의로 만든 것이라 이 결과가 제대로 예측된 한 것인지 알 수 없다. 그래서 따로 분리 해둔 평가 데이터를 사용해 모델의 성능을 측정해보자.

    predictLabel = knn.predict(test_input)
    // 이렇게 하면 정확도가 1이 나온다.

사이킷런으로 비지도학습

K-means Clustering

데이터 안에서 대표하는 군집의 중심을 찾는 알고리즘이다.

how to use

from sklearn.cluster import KMeans
kMeans = KMeans(n_clusters=3)
kMeans.fit(train_input)
KMeans(algorithm='auto', copy_x =True, init='k-means++', max_iter=300,
n_clusters=3, n_init=10, n_jbos=1, precompute_distances='auto',
random_state=None, tol=0.0001, verbose=0)

#fit 함수를 사용해 data와 label을 입력하면 자동으로 데이터를 군집화한다.
앞선 지도학습 모델과 다른 점은 fit에 데이터의 라벨값을 넣지않았다. 그 이유는 K-means clustering에서는 라벨이 필요하지 않기때문이다.

predict_cluster = kMeans.predict(test_input)

#결과는 정확도 0.95가 나와 지도학습 모델보다 조금 적게 나오지만, 라벨을 주지않고도 이런 결과는 높다.

사이킷런으로 피쳐 추출

자연어 처리에서 특징 추출이란 텍스트 데이터에서 단어나 문장들을 어떤 특징 값으로 바꿔주는 것을 의미한다.

텍스트 데이터를 수치화 하는 방법 3가지

  • CountVectorizer
    각 텍스트에서 횟수를 기준으로 특징 추출

        data = ['나는 배가 부르다', '오늘 저녁 뭐먹지', '오늘 운동 해야겠다.', '아침 먹고 운동 해야지']
        cv = CountVectorizer()
        cv.fit(data)
        print(cv.vocabulary_)
        
      	* 결과: {'나는': 2, '배가': 6, '부르다':0, '오늘':3, '저녁':7, '뭐먹지': 5, '운동':1, '해야겠다':8, '먹고':4, '해야지':9}
       	
        //데이터를 벡터로 만들기
        sentence = [data[0]] # ['나는 배가 부르다.']
        print(cv.transform(sentence).toarray())
        
        * 결과: [[1 0 1 0 0 0 1 0 0 0]]
        
  • TfidVectorizer
    TF-IDF 사용
    TF와 IDF 값을 서로 곱해서 사용한다.
    어떤 단어가 해당 문서에는 자주 등장하지만 다른 문서에는 많이 없으면 높은 값을 가진다.

        tfv = TfidVectorizer()
        tfv.fie(data)
        print(tfv.vocabulary_)
        
        * 결과: {'나는': 2, '배가': 6, '부르다':0, '오늘':3, '저녁':7, '뭐먹지': 5, '운동':1, '해야겠다':8, '먹고':4, '해야지':9}
        
        sentence = [data[3]] # 아침먹고 운동해야지
        print(tfv_vectorizer.transform(data).toarray()
        
        * 결과: [[0.  0.43779123 0.   0.   0.55528266 0.
        		0.   0.43779123 0.   0.55528266 ]]

    1, 4, 7, 9 번째 단어를 제외한 단어들은 사용되지 않아서 모두 0값이 나왔다.
    그리고 1, 7번 단어는 0.4 정도의 값과 4, 9번 단어는 0.5 정도의 값을 가져 중요도를 나타낸다.
    이러한 방식은 단순 횟수 보다 단어의 특성을 잘 반영할 수 있다.

  • HashingVectorizer
    CountVectorizer와 동일하지만 텍스트를 처리할 때 해시 함수를 사용하여 실행 시간을 단축함.

Estimator 이해 및 fit(), predict()

사이킷런은 ML모델 학습을 위해 fit(), 학습된 모델의 예측을 위해 predict()를 제공한다. 지도학습의 주요 두 축인 분류와 회귀의 다양한 알고리즘을 fit()과 predict()로 간단히 구현한다. 사이킷런은 많은 종류의 classifier와 Regressor를 제공하는데 이를 통칭해 Estimator라 부른다.

split()

X_train - 학습용 피처 데이터 세트
X_test - 테스트용 피처 데이터 세트
y_train - 학습용 레이블 데이터 세트
y_test - 테스트용 레이블 데이터 세트

교차검증

알고리즘을 학습시키는 학습 데이터와 이에 대한 예측 성능을 평가하기 위한 별도의 테스트용 데이터가 필요하다. 하지만 이 방법 역시 오버피팅에 취약한 약점을 가질 수 있다. 학습한 데이터만 편향적으로 표현될 수 있다.

- K-fold cross validation

가장 보편적으로 사용되는 교차 검증 기법으로, 먼저 K개의 데이터 폴드 세트를 만들어서 K번만큼 각 폴드 세트에 학습과 검증 평가를 반복적으로 수행하는 방법이다.

Data Preprocessiong

사이킷런의 ML알고리즘을 적용하기 전에 데이터에 대해 미리 처리해야 할 기본 사항

  • 결손값 허용되지 않음.
    Null값을 버릴지, 평균으로 처리해 버릴지 결정해야함.
  • 문자열 값을 입력 값으로 허용되지 않음.
    문자열 값은 인코딩해 숫자로 처리해야 한다. 피처 벡터화하거나 불필요한 피처이면 삭제하는 것이 좋다.

Data Encoding

  • Label encoding

  • One Hot encoding

profile
Innovation is mine
post-custom-banner

0개의 댓글