์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ๋น ๋ฐ์ดํฐ๋ถ์๊ธฐ์ฌ
- ํ์ด์ฌ
- ์ธ๋์ํ๋ง
- datascience
- ๋ฐ์ดํฐ๋ถ์์ค์ ๋ฌธ๊ฐ
- opencv
- ADsP
- ์ฃผ์ฑ๋ถ๋ถ์
- iloc
- ํฌ๋กค๋ง
- ๋์ํ๋ณธ
- DBSCAN
- Python
- ๋ ๋ฆฝํ๋ณธ
- Lambda
- LDA
- ๋ฐ์ดํฐ๋ถ์
- ๋ฐ์ดํฐ๋ถ๊ท ํ
- dataframe
- PCA
- numpy
- ์ค๋ฒ์ํ๋ง
- t-test
- ํ ์คํธ๋ถ์
- ๊ตฐ์งํ
- ADP
- pandas
- ๋น ๋ฐ์ดํฐ
- ๋ฐ์ดํฐ๋ถ์์ ๋ฌธ๊ฐ
- ์๋ํด๋ผ์ฐ๋
Data Science LAB
[Python]Bag of Words(BOW) ๋ณธ๋ฌธ
Bag of Words ๋ชจ๋ธ์ ๋ฌธ์๊ฐ ๊ฐ์ง ๋ชจ๋ ๋จ์ด(Words)๋ฅผ ๋ฌธ๋งฅ์ด๋ ์์์ ์๊ด์์ด ๋จ์ด์ ๋น๋ ๊ฐ์ ๋ฐ๋ผ ํผ์ฒ ๊ฐ์ ์ถ์ถํ๋ ๋ชจ๋ธ์ด๋ค. ๋ฌธ์ ๋ด์ ๋ชจ๋ ๋จ์ด๋ฅผ ํ๋ฒ์ ๋ดํฌ(Bag)์์ ๋ฃ์ ๋ค ํ๋ค์ด ์๋ ๋ค๋ ์๋ฏธ๋ก Bag of Words ๋ชจ๋ธ์ด๋ผ๊ณ ํ๋ค.
BOW๋ชจ๋ธ์ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๋ชจ๋ธ์ ๊ตฌ์ถํ ์ ์๊ณ , ๋จ์ํ๊ฒ ๋จ์ด์ ๋น๋ ์์ ๊ธฐ๋ฐํ์ง๋ง, ๋ฌธ์์ ํน์ง์ ์ ๋ํ๋ผ ์ ์์ด ํ์ฉ๋๊ฐ ๋๋ค.
ํ๊ณ์
- ๋ฌธ๋งฅ ์๋ฏธ ๋ฐ์ ๋ถ์กฑ : BOW๋ ๋จ์ด์ ์์๋ฅผ ๊ณ ๋ คํ์ง ์๊ธฐ ๋๋ฌธ์, ๋จ์ด์ ๋ฌธ๋งฅ์ ์ธ ์๋ฏธ๊ฐ ๋ฌด์๋๋ค. ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด n_gram๋ฑ ์ฌ๋ฌ ๊ธฐ๋ฒ์ ํ์ฉํ ์ ์์ง๋ง, ์ ํ์ ์ด๋ค.
- ํฌ์ ํ๋ ฌ ๋ฌธ์ : BOW๋ก ํผ์ฒ ๋ฒกํฐํ๋ฅผ ์ํํ๋ฉด, ํฌ์ ํ๋ ฌ ํํ์ ๋ฐ์ดํฐ ์ ์ด ๋ง๋ค์ด์ง๊ธฐ ์ฝ๋ค. ๋ง์ ๋ฌธ์์์ ๋จ์ด๋ฅผ ์ถ์ถํ๋ฉด ๋งค์ฐ ๋ง์ ๋จ์ด๊ฐ ์ปฌ๋ผ์ผ๋ก ๋ง๋ค์ด์ง๊ธฐ ๋๋ฌธ์ ๋จ์ด๊ฐ ๋ฌธ์๋ง๋ค ๋ํ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๋๊ท๋ชจ์ ์ปฌ๋ผ์ผ๋ก ๊ตฌ์ฑ๋ ํ๋ ฌ์์ ๋๋ถ๋ถ์ ๊ฐ์ด 0์ผ๋ก ์ด๋ฃจ์ด์ง ํ๋ ฌ์ ํฌ์ ํ๋ ฌ์ด๋ผ๊ณ ํ๋๋ฐ, ํฌ์ ํ๋ ฌ์ ๋จธ์ ๋ฌ๋์ ์๊ณ ๋ฆฌ์ฆ ์ํ ์๊ฐ๊ณผ ์์ธก ์ฑ๋ฅ์ ๋จ์ด๋จ๋ฆฐ๋ค.
ํผ์ฒ ๋ฒกํฐํ
๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์์๋ ์ซ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ๋ฐ๊ธฐ ๋๋ฌธ์, ํ ์คํธ ๋ฐ์ดํฐ๋ ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ก ์ ๋ ฅํ ์ ์๋ค. ๋ฐ๋ผ์ ํน์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ ์ซ์ ๊ฐ์ธ ๋ฒกํฐ ๊ฐ์ผ๋ก ๋ณํํด์ผ ํ๋๋ฐ, ์ด๋ฌํ ๋ณํ์ ํผ์ฒ ๋ฒกํฐํ๋ผ๊ณ ํ๋ค.
๊ฐ ๋ฌธ์์ ํ ์คํธ๋ฅผ ๋จ์ด๋ก ์ถ์ถํด ํผ์ฒ๋ก ํ ๋นํ๊ณ , ๊ฐ ๋จ์ด์ ๋ฐ์ ๋น๋ ๊ฐ์ ํผ์ฒ์ ๋ถ์ฌํด ๊ฐ ๋ฌธ์๋ฅผ ์ด ๋จ์ด ํผ์ฒ์ ๋ฐ์ ๋น๋ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋ ๋ฒกํฐ๋ฅผ ๋ง๋๋ ๊ธฐ๋ฒ์ด๋ค.
BOW ๋ชจ๋ธ์์ ํผ์ฒ ๋ฒกํฐํ๋ฅผ ์ํํ๋ ๊ฒ์ ๋ชจ๋ ๋ฌธ์์์ ๋ชจ๋ ๋จ์ด๋ฅผ ์ปฌ๋ผํํ๋ก ๋์ดํ๊ณ ๊ฐ ๋ฌธ์์์ ํด๋น ๋จ์ด์ ํ์๋ ์ ๊ทํ๋ ๋น๋๋ฅผ ๊ฐ์ผ๋ก ๋ถ์ฌํ๋ ๋ฐ์ดํฐ ์ ๋ชจ๋ธ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ด๋ค.
- ์นด์ดํธ ๊ธฐ๋ฐ์ ๋ฒกํฐํ : ๋จ์ด ํผ์ฒ์ ๊ฐ์ ๋ถ์ฌํ ๋, ๊ฐ ๋ฌธ์์์ ํด๋น ๋จ์ด๊ฐ ๋ํ๋๋ ํ์(Count)๋ฅผ ๋ถ์ฌํ๋ ๊ฒฝ์ฐ
(๋ฌธ์์ ํน์ง๋ณด๋ค๋ ์ธ์ด์ ํน์ฑ์ ์์ฃผ ์ฌ์ฉ๋๋ ๋จ์ด์ ๋์ ๊ฐ์ ๋ถ์ฌํ๋ ๋จ์ )
- TF-IDF(Term Frequency - Inverse Document Frequency) : ๊ฐ๋ณ ๋ฌธ์์์ ์์ฃผ ๋ํ๋๋ ๋จ์ด์ ๋์ ๊ฐ์ค์น๋ฅผ ์ฃผ์ง๋ง, ๋ชจ๋ ๋ฌธ์์์ ์์ฃผ ๋ํ๋๋ ๋จ์ด์ ๋ํด์๋ ํจ๋ํฐ๋ฅผ ๋ถ์ฌํ๋ ๋ฐฉ์์ด๋ค.
=> ๋ฌธ์๋ง๋ค ํ ์คํธ๊ฐ ๊ธธ๊ณ , ๋ฌธ์๊ฐ ๋ง์ ๊ฒฝ์ฐ์๋ ์นด์ดํธ ๋ฐฉ์๋ณด๋ค๋ TF-IDF๋ฐฉ์์ด ์ ๋ฆฌ!
์ฌ์ดํท๋ฐ์์์ Count(CountVectorizer)
์นด์ดํธ ๊ธฐ๋ฐ์ ๋ฒกํฐํ๋ฅผ ๊ตฌํํ ํด๋์ค, ์๋ฌธ์ ์ผ๊ด ๋ณํ, ํ ํฐํ, ์คํ์๋ ํํฐ๋ง๊น์ง ์ํ ๊ฐ๋ฅ
ํ๋ผ๋ฏธํฐ ๋ช | ํ๋ผ๋ฏธํฐ ์ค๋ช |
max_df | ๋๋ฌด ๋์ ๋น๋์์ ๋จ์ด ํผ์ฒ ์ ์ธ |
min_df | ๋๋ฌด ๋ฎ์ ๋น๋์์ ๋จ์ด ํผ์ฒ ์ ์ธ |
max_features | ์ถ์ถํ๋ ํผ์ฒ์ ๊ฐ์ ์ ํ(์ ์๊ฐ) |
stop_words | ์คํฑ์๋๋ก ์ง์ ๋ ๋จ์ด๋ ์ถ์ถ์์ ์ ์ธ |
n_gram_range | n_gram์ ๋ฒ์ ์ค์ (๋ฒ์ ์ต์, ๋ฒ์ ์ต๋) |
analyzer | ํผ์ฒ ์ถ์ถ์ ์ํํ ๋จ์ ์ง์ (default = 'word') |
token_pattern | ์ ๊ท ํํ์ ํจํด ์ง์ |
tokenizer | ํ ํฐํ๋ฅผ ๋ณ๋์ ์ปค์คํ ํจ์๋ก ์ด์ฉ์ ์ง์ |
CountVectorizer๋ฅผ ์ด์ฉํด ํผ์ฒ ๋ฒกํฐํ๋ฅผ ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. ์ฌ์ ๋ฐ์ดํฐ ๊ฐ๊ณต : ๋ฌธ์๋ฅผ ์๋ฌธ์๋ก ๋ณ๊ฒฝํ๋ ๋ฑ ์ฌ์ ์์ ์ํ
2. ํ ํฐํ : ๋ํดํธ๋ก ๋จ์ด ๊ธฐ์ค์ผ๋ก n_gram_range๋ฅผ ๋ฐ์ํด ๊ฐ ๋จ์ด ํ ํฐํ
3. ํ ์คํธ ์ ๊ทํ : Stop Words ํํฐ๋ง๋ง ์ํ
4. ํผ์ฒ ๋ฒกํฐํ : max_df, min_df ๋ฑ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์ํ์ฌ ํ ํฐํ๋ ๋จ์ด๋ค์ ํผ์ฒ ์ถ์ถ ํ ๋ฒกํฐ ๊ฐ ์ ์ฉ
ํฌ์ ํ๋ ฌ - COOํ์
COO(Coordinate : ์ขํ) ํ์์ 0์ด ์๋ ๋ฐ์ดํฐ๋ง ๋ณ๋์ ๋ฐ์ดํฐ ๋ฐฐ์ด์ ์ ์ฅํ๊ณ , ๊ทธ ๋ฐ์ดํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ํ๊ณผ ์ด์ ์์น๋ฅผ ๋ณ๋์ ๋ฐฐ์ด๋ก ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค.
ํ์ด์ฌ์์๋ ํฌ์ ํ๋ ฌ ๋ฐํ์ ์ํด ์ฃผ๋ก Scipy๋ฅผ ์ด์ฉํ๋ค.
Scipy์ sparse๋ฅผ ์ด์ฉํด ํฌ์ ํ๋ ฌ ๋ณํ์ COOํ์์ผ๋ก ํด๋ณด๋ ค๊ณ ํ๋ค.
import numpy as np
from scipy import sparse
#array ์์ฑ
dense = np.array([[3,0,1],[0,2,0]])
#0์ด ์๋ ๋ฐ์ดํฐ ์ถ์ถ
data = np.array([3,1,2])
#ํ๊ณผ ์ด ์์น๋ฅผ ๊ฐ๊ฐ ๋ฐฐ์ด๋ก ์์ฑ
row_pos = np.array([0,0,1])
col_pos = np.array([0,2,1])
#sparseํจํค์ง์ coo_matrix๋ฅผ ์ด์ฉํด COOํ์์ผ๋ก ํฌ์ ํ๋ ฌ ์์ฑ
sparse_coo = sparse.coo_matrix((data,(row_pos,col_pos)))
#toarray๋ฅผ ์ด์ฉํด ๋ฐ์ง ํํ์ ํ๋ ฌ๋ก ์ถ๋ ฅ
sparse_coo.toarray()
์๋์ ๋ฐ์ดํฐ ํ๋ ฌ๋ก ์ถ์ถ๋จ์ ํ์ธ
ํฌ์ ํ๋ ฌ - CSR ํ์
๋ฐ๋ณต์ ์ธ ์์น ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ COOํ์์ ๋จ์ ๋ณด์
0์ด ์๋ ๋ฐ์ดํฐ ๋ฐฐ์ด๊ณผ ์ด ์์น ๋ฐฐ์ด, ํ ์์น ๋ฐฐ์ด์ ๊ณ ์ ํ ๊ฐ์ ์์ ์์น ๋ฐฐ์ด์ csr_matrix์ ์์ฑ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ ฅํ๋ฉด csr๋ฐฉ์์ผ๋ก ๋ณํํ ์ ์๋ค.
from scipy import sparse
dense2 = np.array([[0,0,1,0,0,5],
[1,4,0,3,2,5],
[0,6,0,3,0,0],
[2,0,0,0,0,0],
[0,0,0,7,0,8],
[1,0,0,0,0,0]])
#0์ด ์๋ ๋ฐ์ดํฐ ์ถ์ถ
data2 = np.array([1,5,1,4,3,2,5,6,4,2,7,8,1])
#ํ๊ณผ ์ด ์์น๋ฅผ ๊ฐ๊ฐ array๋ก ์์ฑ
row_pos = np.array([0,0,1,1,1,1,1,2,2,3,4,4,5])
col_pos = np.array([2,5,0,1,3,4,5,1,3,0,3,5,0])
#COOํ์์ผ๋ก ๋ณํ
sparse_coo = sparse.coo_matrix((data2,(row_pos,col_pos)))
#ํ ์์น ๋ฐฐ์ด์ ๊ณ ์ ํ ๊ฐ์ ์์ ์์น ์ธ๋ฑ์ค๋ฅผ ๋ฐฐ์ด๋ก ์์ฑ
row_pos_ind = np.array([0,2,7,9,10,12,13])
#CSRํ์์ผ๋ก ๋ณํ
sparse_csr = sparse.csr_matrix((data2,col_pos,row_pos_ind))
print("COO : \n",sparse_coo.toarray())
print("CSR : \n",sparse_csr.toarray())
์ค์ ์ฌ์ฉ์์๋ ๋ฐ์ง ํ๋ ฌ์ ์์ฑ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ ฅํ๋ฉด, COO๋ CSR ํฌ์ ํ๋ ฌ๋ก ์์ฑํ ์ ์๋ค.
dense3 = np.array([[0,0,1,0,0,5],
[1,4,0,3,2,5],
[0,6,0,3,0,0],
[2,0,0,0,0,0],
[0,0,0,7,0,8],
[1,0,0,0,0,0]])
coo = sparse.coo_matrix(dense3)
csr = sparse.csr_matrix(dense3)
print("COO : \n",coo.toarray())
print("CSR : \n",csr.toarray())
'๐ Machine Learning > ํ ์คํธ ๋ถ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๊ฐ์ฑ๋ถ์ - ๋น์ง๋ ํ์ต (0) | 2022.02.20 |
---|---|
[Python] ๊ฐ์ฑ ๋ถ์(Sentiment Analysis) - ์ง๋ํ์ต (0) | 2022.02.19 |
[Python] ๋ด์ค ๊ทธ๋ฃน ๋ถ๋ฅ (0) | 2022.02.19 |
[Python]ํ ์คํธ ์ ์ฒ๋ฆฌ - ํ ์คํธ ์ ๊ทํ (0) | 2022.02.17 |
ํ ์คํธ ๋ถ์(Text Analytics) (0) | 2022.02.15 |