Machine Learning/Scikit-Learn

[Machine Learning] Scikit-Learn

데이터 세상 2021. 3. 10. 22:58
728x90
반응형

Scikit-Learn(사이킷런)

  • python 머신러닝 라이브러리

 

Scikit-Learn 설치

# scikit-learn 설치
pip install scikit-learn

# 설치 확인
import sklearn
sklearn.__verion__

의존성 라이브러리

 


Scipy(사이파이)

파이썬을 기반으로 하여 과학, 분석, 그리고 엔지니어링을 위한 과학(계산)적 컴퓨팅 영역의 여러 기본적인 작업을 위한 라이브러리

Numpy, Pandas, Matplotlib, Sympy 등과 함께 동작

수치적분 루틴과 미분방정식 해석기, 방정식의 근을 구하는 알고리즘, 표준 연속/이산 확률분포화 다양한 통계관련 도구 제공

기능 설명
scipy.integrate 수치적분 루틴과 미분방정식 해법기
scipy.linalg numpy.linalg에서 제공하는 것보다 더 확장된 선형대수 루틴과 매트릭스 분해
scipy.optimize 함수 최적화기와 방정식의 근을 구하는 알고리즘
scipy.signal 시그널 프로세싱 도구
scipy.sparse 희소 행렬과 희소 선형 시스템 풀이법
scipy.special 감마 함수처럼 흔히 사용되는 수학 함수를 구현한 포트란 라이브러리인 SPECFUN 확장
scipy.stats 표준 연속/이산 확률 분포(집적도 함수, 샘플러, 연속 분포 함수)와 다양한 통계 테스트, 그리고 좀 더 기술적인 통계 도구
scipy.weave 배열 계산을 빠르게 하기 위해 인라인 C++ 코드를 사용하는 도구

 

데이터 분리

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

iris_dataset = load_iris()

# random_state: 데이터를 나눌 때 무작위로 데이터를 선택되는 것은 제어
# 함수를 여러 번 사용하더라도 이 값을 똑같이 설정할 경우 동일한 데이터를 선택해서 분리
train_intput, test_input, train_label, test_label = train_test_split(iris_dataset['data']
	iris_dataset['target'], test_size = 0.2, random_state = 42)

 

특징 추출

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

CountVectorizer

  • 텍스트 데이터에서 횟수를 기준으로 특징을 추출하는 방법
from sklearn.feature_extraction.text import CountVectorizer

text_data = ['나는 배가 고프다', '내일 점심 뭐먹지', '내일 공부 해야겠다', '점심 먹고 공부 해야지']

count_vectorizer = CountVectorizer()
# 단어 사전 생성
count_vectorizer.fit(text_data)
print(count_vectorizer.vocabulary_)

>>
{'나는': 2, '배가': 6, '고프다': 0, '내일': 3, '점심': 7, '뭐먹지': 5, 
	'공부': 1, '해야겠다': 8, '먹고': 4, '해야지': 9}

# 텍스트 데이터 벡터
sentence = [text_data[0]] #나는 배가 고프다
print(count_vectorizer.transform(sentence).toarray())

>>
[[1 0 1 0 0 0 1 0 0 0]]
  • 직관적이고 간단
  • 큰 의미가 없지만 자주 사용되는 단어들(조사, 지시대명사)이 높은 특징 값을 가질 수 있음

 

TfidVectorizer

  • TF(Term Frequency)
    • 특정 단어가 하나의 데이터 안에서 등장하는 횟수
  • DF(Document Frequency)
    • 문서 빈도 값으로, 특정 단어가 여러 데이터에 자주 등장하는지를 알려주는 지표
  • IDF(Inverse Document Frequency)
    • 특정 단어가 다른 데이터에 등장하지 않을수록 값이 커진다는 것을 의미
  • TF-IDF
    • 어떤 단어가 해당 문서에 자주 등장하지만 다른 문서에는 많이 없는 단어일수록 높은 값을 가지게 됨
from sklearn.feature_extraction.text import TfidfVectorizer

text_data = ['나는 배가 고프다', '내일 점심 뭐먹지', '내일 공부 해야겠다', '점심 먹고 공부 해야지']
tfidf_vectorizer = TfidfVectorizer()
tfidf_vectorizer.fit(text_data)
print(tfidf_vectorizer.vocabulary_)

>>
{'나는': 2, '배가': 6, '고프다': 0, '내일': 3, '점심': 7, '뭐먹지': 5, 
	'공부': 1, '해야겠다': 8, '먹고': 4, '해야지': 9}

sentence = [text_data[3]] # ['점심 먹고 공부 해야지']
print(tfidf_vectorizer.transform(sentence).toarray())

>>
[[0.         0.43779123 0.         0.         0.55528266 0.
  0.         0.43779123 0.         0.55528266]]

 

HashingVectorizer

  • CountVectorizer와 동일한 방법이지만 텍스트를 처리할 때 해시 함수를 사용하여 실행 시간을 줄임
  • 텍스트의 크기가 클수록 HashingVectorizer를 사용하는 것이 효율적

References

 

 

728x90
반응형

'Machine Learning > Scikit-Learn' 카테고리의 다른 글

[Scikit-Learn] Pipeline  (0) 2022.10.31