728x90
반응형
Scikit-Learn(사이킷런)
- python 머신러닝 라이브러리
Scikit-Learn 설치
# scikit-learn 설치
pip install scikit-learn
# 설치 확인
import sklearn
sklearn.__verion__
의존성 라이브러리
- Numpy (Numerical Python)
- Scipy
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 |
---|