์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ๋ ๋ฆฝํ๋ณธ
- Python
- ์๋ํด๋ผ์ฐ๋
- pandas
- ์ฃผ์ฑ๋ถ๋ถ์
- dataframe
- opencv
- ๋น ๋ฐ์ดํฐ๋ถ์๊ธฐ์ฌ
- ํ์ด์ฌ
- ๋์ํ๋ณธ
- ๋น ๋ฐ์ดํฐ
- numpy
- ๋ฐ์ดํฐ๋ถ์์ค์ ๋ฌธ๊ฐ
- ์ธ๋์ํ๋ง
- datascience
- t-test
- ๋ฐ์ดํฐ๋ถ์์ ๋ฌธ๊ฐ
- ๋ฐ์ดํฐ๋ถ์
- Lambda
- ํฌ๋กค๋ง
- ๊ตฐ์งํ
- ์ค๋ฒ์ํ๋ง
- ADsP
- ํ ์คํธ๋ถ์
- ๋ฐ์ดํฐ๋ถ๊ท ํ
- DBSCAN
- LDA
- ADP
- iloc
- PCA
Data Science LAB
[Python] ๋ด์ค ๊ทธ๋ฃน ๋ถ๋ฅ ๋ณธ๋ฌธ
[Python] ๋ด์ค ๊ทธ๋ฃน ๋ถ๋ฅ
ใ ใ ใ ใ 2022. 2. 19. 15:09์ฌ์ดํท๋ฐ ๋ด๋ถ์ ์์ ๋ฐ์ดํฐ์ธ 20 ๋ด์ค๊ทธ๋ฃน ๋ฐ์ดํฐ ์ ์ ํ์ฉํด ํ ์คํธ ๋ถ๋ฅ ์ค์ต์ ํด๋ณด๋ ค๊ณ ํ๋ค.
ํ ์คํธ ๋ถ๋ฅ๋ ํ์ต ๋ฐ์ดํฐ๋ฅผ ํตํด ๋ชจ๋ธ์ ํ์ต ์ํจ ํ ์ด ํ์ต ๋ชจ๋ธ์ ์ด์ฉํด ๋ค๋ฅธ ๋ฌธ์์ ๋ถ๋ฅ๋ฅผ ์์ธกํด ๋ณด๋ ค๊ณ ํ๋ค.
Count๊ธฐ๋ฐ์ ๋ก์ง์คํฑ ํ๊ท๋ชจ๋ธ๊ณผ, TF-IDF๊ธฐ๋ฐ์ ๋ก์ง์คํฑ ํ๊ท๋ชจ๋ธ์ ๊ฐ๊ฐ ์์ฑํ ํ ๋น๊ตํด๋ณด๊ณ
ํ์ดํผํ๋ผ๋ฏธํฐ ์กฐ์ ๊น์ง ํด๋ณด๋ ค๊ณ ํ๋ค( •ฬ ω •ฬ )โง
1. ํ ์คํธ ์ ๊ทํ
fetch_20newsgroups()๋ ์ธํฐ๋ท์์ ๋ก์ปฌ ์ปดํจํฐ๋ก ๋จผ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ํ, ๋ฉ๋ชจ๋ฆฌ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ก๋ฉํ๋ค.
from sklearn.datasets import fetch_20newsgroups
news_data = fetch_20newsgroups(subset = 'all', random_state = 156)
#์ด๋ค key๊ฐ์ ๊ฐ์ง๊ณ ์๋์ง ํ์ธ
print(news_data.keys())
fillenames๋ fetch_20newsgroups API๊ฐ ์ธํฐ๋ท์์ ๋ด๋ ค๋ฐ์ ๋ก์ปฌ ์ปดํจํฐ์ ์ ์ฅํ๋ ๋๋ ํฐ๋ฆฌ์ ํ์ผ๋ช ์ ์ง์นญ
import pandas as pd
print("target ํด๋์ค์ ๊ฐ๊ณผ ๋ถํฌ๋ : \n",pd.Series(news_data.target).value_counts().sort_index())
print("target ํด๋์ค์ ์ด๋ฆ๋ค : \n",news_data.target_names)
Targetํด๋์ค์ ๊ฐ์ 0-19(20๊ฐ)๊น์ง๋ก ๋ถํฌ๋์ด์์
print(news_data.data[0])
๋ถ๋ฌ์จ ๋ฐ์ดํฐ ์ค ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ๋ฐ์ดํฐ ํ๋๋ง ํ์ธํด ๋ณธ ๊ฒฐ๊ณผ,
์ ๋ชฉ, ์์ฑ์, ์์, ์ด๋ฉ์ผ, ๊ธฐ์ฌ ๋ด์ฉ ๋ฑ ๋ค์ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์
๋ชจ๋ ํผ์ฒ๋ฅผ ํฌํจํด ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์งํํ๋ฉด ๋์ ์ฑ๋ฅ์ ๊ฐ์ง๊ฒ ๋จ -> ๊ธฐ์ฌ ๋ด์ฉ๋ง์ ์ด์ฉํด ํ ์คํธ ๋ถ์ ์งํ
ํ์ต์ฉ/ํ ์คํธ์ฉ ๋ฐ์ดํฐ์ ๋ด์ฉ๋ง์ ์ถ์ถ
#ํ์ต์ฉ ๋ฐ์ดํฐ์ ๋ด์ฉ๋ง ์ถ์ถ
train_news = fetch_20newsgroups(subset = 'train', remove=('headers','footers','quotes'),random_state=156)
X_train = train_news.data
y_train = train_news.target
#ํ
์คํธ ๋ฐ์ดํฐ์ ๋ด์ฉ๋ง ์ถ์ถ
test_news = fetch_20newsgroups(subset = 'test',remove=('headers','footers','quotes'),random_state=156)
X_test = test_news.data
y_test = test_news.target
print("ํ์ต ๋ฐ์ดํฐ ํฌ๊ธฐ : {}".format(len(train_news.data)))
print("ํ
์คํธ ๋ฐ์ดํฐ ํฌ๊ธฐ : {}".format(len(test_news.data)))
ํ์ต ๋ฐ์ดํฐ๋ 11314๊ฐ์ ๋ด์ค๊ทธ๋ฃน ๋ฌธ์๊ฐ ๋ฆฌ์คํธ ํํ๋ก ์ฃผ์ด์ง๊ณ ,
ํ ์คํธ ๋ฐ์ดํฐ๋ 7532๊ฐ์ ๋ด์ค๊ทธ๋ฃน ๋ฌธ์๊ฐ ๋ฆฌ์คํธ ํํ๋ก ์ฃผ์ด์ง ๊ฒ์ ํ์ธํ ์ ์์
ํผ์ฒ ๋ฒกํฐํ ๋ณํ๊ณผ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ ํ์ต, ์์ธก, ํ๊ฐ(Count๊ธฐ๋ฐ)
from sklearn.feature_extraction.text import CountVectorizer
#ํผ์ฒ ๋ฒกํฐํ ๋ณํ ์ํ
cnt_vect = CountVectorizer()
cnt_vect.fit(X_train)
X_train_cnt_vect = cnt_vect.transform(X_train)
#ํ์ต๋ฐ์ดํฐ๋ก ์์ฑ๋ CountVectirizer๋ฅผ ์ด์ฉํด ํ
์คํธ ๋ฐ์ดํฐ ํผ์ฒ ๋ฒกํฐํ ๋ณํ
X_test_cnt_vect = cnt_vect.transform(X_test)
print("ํ์ต ๋ฐ์ดํฐ CountVectorizer Shape : ",X_train_cnt_vect.shape)
ํ์ต๋ฐ์ดํฐ๋ฅผ CountVectorizer๋ก ํผ์ฒ๋ฅผ ์ถ์ถํ ๊ฒฐ๊ณผ, 11314๊ฐ์ ๋ฌธ์์์ ๋จ์ด๊ฐ 101631๊ฐ๋ก ๋ง๋ค์ด์ง
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
#๋ก์ง์คํฑํ๊ท๋ถ์์ผ๋ก ํ์ต
lr = LogisticRegression()
lr.fit(X_train_cnt_vect,y_train)
#์์ธก
lr_pred = lr.predict(X_test_cnt_vect)
#ํ๊ฐ
print('CountVectorized Logistic Regression ์์ธก ์ ํ๋ : {0:3f}'.format(accuracy_score(y_test,lr_pred)))
ํผ์ฒ ๋ฒกํฐํ๋ ๋ฐ์ดํฐ์ ๋ก์ง์คํฑ ํ๊ท๋ฅผ ์ ์ฉํด ๋ด์ค๊ทธ๋ฃน์ ๋ถ๋ฅํ ๊ฒฐ๊ณผ,
accuracy_score๋ 0.607๋ก ๋ํ๋จ
ํผ์ฒ ๋ฒกํฐํ ๋ณํ๊ณผ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ ํ์ต, ์์ธก, ํ๊ฐ(Count๊ธฐ๋ฐ)
from sklearn.feature_extraction.text import TfidfVectorizer
#TF-IDF ๋ฒกํฐํ ์ ์ฉ
tfidf_vect = TfidfVectorizer()
tfidf_vect.fit(X_train)
X_train_tfidf_vect = tfidf_vect.transform(X_train)
X_test_tfidf_vect = tfidf_vect.transform(X_test)
#๋ก์ง์คํฑํ๊ท ์ ์ฉ
lr = LogisticRegression()
lr.fit(X_train_tfidf_vect,y_train)
pred = lr.predict(X_test_tfidf_vect)
print('TF-IDF Logistic Regression ์์ธก ์ ํ๋ : {0:3f}'.format(accuracy_score(y_test,pred)))
TF-IDF ์ accuracy_score๋ 0.674๋ก Count๊ธฐ๋ฐ๋ณด๋ค ์ข ๋ ๋์ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
#stop words ํํฐ๋ง ์ถ๊ฐ ํ, n_gram์ (1,2)๋ก ๋ณ๊ฒฝ
tfidf_vect = TfidfVectorizer(stop_words='english',ngram_range = (1,2),max_df = 300)
tfidf_vect.fit(X_train)
X_train_tfidf_vect = tfidf_vect.transform(X_train)
X_test_tfidf_vect = tfidf_vect.transform(X_test)
lr = LogisticRegression()
lr.fit(X_train_tfidf_vect,y_train)
pred = lr.predict(X_test_tfidf_vect)
print("TF-IDF ๋ก์ง์คํฑ ํ๊ท์ ์์ธก ์ ํ๋ : {0:.3f}".format(accuracy_score(y_test,pred)))
stop wordsํํฐ๋ง์ ์ถ๊ฐํ ํ ngram_range๋ฅผ (1,2)๋ก ์ค์ ํ์๋๋, accuracy_score๊ฐ 0.692๊น์ง ๋์์ก๋ค!
GridSearch ์คํ
from sklearn.model_selection import GridSearchCV
#์ต์ C๊ฐ ๋์ถ ํ๋ ์ํ ๋ฐ CV๋ 3 ํด๋ ์
์งํ
params = {'C':[0.01,0.1,1,5,10]}
grid_cv_lr = GridSearchCV(lr,param_grid = params,cv=3, scoring = 'accuracy',verbose=1)
grid_cv_lr.fit(X_train_tfidf_vect,y_train)
print("๋ก์ง์คํฑ ํ๊ท์ best C Parameter : ",grid_cv_lr.best_params_)
#์ต์ C๊ฐ์ผ๋ก ํ์ต๋ grid_cv๋ก ์์ธก ๋ฐ ์ ํ๋ ํ๊ฐ
pred = grid_cv_lr.predict(X_test_tfidf_vect)
print("TF-IDF Vectorized Logistic Regression์ ์ ํ๋ : {0:3f}".format(accuracy_score(y_test,pred)))
์ต์ ํ๋ผ๋ฏธํฐ C๋ 10์ผ๋ก ๋ํ๋ฌ์ผ๋ฉฐ, ๋ก์ง์คํฑํ๊ท์ ์ ํ๋๋ 0.701๊น์ง ์์นํ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฌ์ดํท๋ฐ ํ์ดํ๋ผ์ธ ์ฌ์ฉ ๋ฐ GridSearchCV์์ ๊ฒฐํฉ
from sklearn.pipeline import Pipeline
#TfidfVecorizer ๊ฐ์ฒด๋ฅผ tfidf_vect๋ก, ๋ก์ง์คํฑ ํ๊ท ๊ฐ์ฒด๋ฅผ lr๋ก ์์ฑํ๋ pipeline
pipeline = Pipeline([('tfidf_vect',TfidfVectorizer(stop_words = 'english',ngram_range = (1,2),max_df=300)),
('lr',LogisticRegression(C=10))])
pipeline.fit(X_train,y_train)
pred = pipeline.predict(X_test)
print("pipeline์ ํตํ Logistic Regression์ ์์ธก ์ ํ๋ : {0:.3f}".format(accuracy_score(y_test,pred)))
์ฌ์ดํท๋ฐ์ Pipeline ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํผ์ฒ ๋ฒกํฐํ์ ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ ํ์ต, ์์ธก์ ํ ๋ฒ์ ์งํํ ์ ์๋ค.
Pipeline์ ์ด์ฉํ๋ฉด ๋ฐ์ดํฐ์ ์ ์ฒ๋ฆฌ์ ๋จธ์ ๋ฌ๋ ํ์ต ๊ณผ์ ์ ํต์ผ๋ API ๊ธฐ๋ฐ์์ ์ฒ๋ฆฌํ ์ ์์ด ๋ ์ง๊ด์ ์ธ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค. ๋ํ ๋์ฉ๋ ๋ฐ์ดํฐ์ ํผ์ฒ ๋ฒกํฐํ๋ฅผ ๋ณ๋ ๋ฐ์ดํฐ๋ก ์ ์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ์ํ์๊ฐ์ ์ข ๋ ์ ์ฝํ ์ ์๋ค.
๋ณ๋์ TfidfVectorizer์ LogisticRegression์ fit(), transform(), predict()๋ฅผ ์ํํ ํ์๊ฐ ์๋ค.
from sklearn.pipeline import Pipeline
pipeline = Pipeline([('tfidf_vect',TfidfVectorizer(stop_words='english')),
('lr',LogisticRegression())])
#Pipeline์ ๊ฐ๊ฐ์ ๊ฐ์ฒด ๋ณ์์ ์ธ๋๋ฐ(_) 2๊ฐ๋ฅผ ์ฐ๋ฌ์ ๋ถ์ฌ GridSearchCV์ ์ฌ์ฉ๋ ํ๋ผ๋ฏธํฐ,ํ์ดํผํ๋ผ๋ฏธํฐ ์ด๋ฆ๊ณผ ๊ฐ ์ค์
params = {'tfidf_vect__ngram_range':[(1,1),(1,2),(1,3)],
'tfidf_vect__max_df': [100,300,700],
'lr__C':[1,5,10]}
#GridSearchCV์ ์์ฑ์์ Estimator๊ฐ ์๋ Pipeline๊ฐ์ฒด ์
๋ ฅ
grid_cv_pipe = GridSearchCV(pipeline,param_grid=params,cv=3,scoring='accuracy',verbose=1)
grid_cv_pipe.fit(X_train,y_train)
print(grid_cv_pipe.best_params_,grid_cv_pipe.best_score_)
pred = grid_cv_pipe.predict(X_test)
print('Pipeline์ ํตํ Logistic Regression์ ์์ธก ์ ํ๋ : {0:.3f}'.format(accuracy_score(y_test,pred)))
'๐ Machine Learning > ํ ์คํธ ๋ถ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๊ฐ์ฑ๋ถ์ - ๋น์ง๋ ํ์ต (0) | 2022.02.20 |
---|---|
[Python] ๊ฐ์ฑ ๋ถ์(Sentiment Analysis) - ์ง๋ํ์ต (0) | 2022.02.19 |
[Python]Bag of Words(BOW) (0) | 2022.02.18 |
[Python]ํ ์คํธ ์ ์ฒ๋ฆฌ - ํ ์คํธ ์ ๊ทํ (0) | 2022.02.17 |
ํ ์คํธ ๋ถ์(Text Analytics) (0) | 2022.02.15 |