Sklearn 모델 실 용 기법
원시 데이터 의 종 류 는 여러 가지 가 있 는데 디지털 화 된 신호 데 이 터 를 제외 하고 대량의 기호 화 된 텍스트 도 있다. 그러나 우 리 는 기호 화 된 문자 자 체 를 계산 임무 에 직접 사용 할 수 없고 특정한 처리 수단 을 통 해 텍스트 를 특징 벡터 로 미리 계량 화하 고 기호 로 표시 하 는 특징 이 상대 적 으로 구조 화 되 었 으 며 문자 와 같은 데이터 구조 로 저장 해 야 한다.이때 우 리 는 DictVectorizer 를 사용 하여 특징 을 추출 하고 양 적 으로 한다. 예 를 들 어:
import pandas as pd
measurements = [
{'city':'Dubai','temperature':33},
{'city':'London','temperature':12},
{'city':'San Francisco','temperature':18}
]
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer()
print(vec.fit_transform(measurements).toarray())
print(vec.get_feature_names())
#
[[ 1. 0. 0. 33.]
[ 0. 1. 0. 12.]
[ 0. 0. 1. 18.]]
['city=Dubai', 'city=London', 'city=San Francisco', 'temperature']
다른 일부 텍스트 데 이 터 는 더욱 직접적 이 고 특수 한 데이터 구 조 를 사용 하여 저장 하지 않 았 다. 단지 일련의 문자열 일 뿐이다. 우 리 는 이런 데 이 터 를 처리 할 때 자주 사용 하 는 텍스트 특징 표현 방법 은 단어 봉투 법 이다. 말 그대로 단어 가 나타 나 는 순 서 를 고려 하지 않 고 텍스트 에 나타 난 모든 어 휘 를 일련의 특징 으로 간주 할 뿐이다.우 리 는 이러한 중복 되 지 않 는 어휘 집합 을 어표 라 고 부 르 기 때문에 모든 훈련 텍스트 는 높 은 차원 의 어표 에서 하나의 벡터 를 발사 할 수 있 고 특징 수치의 계산 은 흔히 두 가지 방법 이 있다. CountVectorizer 와 TfidfVectorizer:
from sklearn.datasets import fetch_20newsgroups
news = fetch_20newsgroups(subset='all')
from sklearn.cross_validation import train_test_split
X_train,X_test,y_train,y_test = train_test_split(news.data,news.target,test_size=0.25,random_state=33)
from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer()
X_count_train = vec.fit_transform(X_train)
X_count_test = vec.transform(X_test)
from sklearn.naive_bayes import MultinomialNB
mnb = MultinomialNB()
mnb.fit(X_count_train,y_train)
y_count_predict = mnb.predict(X_count_test)
from sklearn.metrics import classification_report
print('The accruacy of Naive Bayes is ',mnb.score(X_count_test,y_test))
print(classification_report(y_test,y_count_predict,target_names=news.target_names))
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vec = TfidfVectorizer()
X_tfidf_train = tfidf_vec.fit_transform(X_train)
X_tfidf_test = tfidf_vec.transform(X_test)
from sklearn.naive_bayes import MultinomialNB
mnb = MultinomialNB()
mnb.fit(X_tfidf_train,y_train)
y_tfidf_predict = mnb.predict(X_tfidf_test)
from sklearn.metrics import classification_report
print('The accruacy of Naive Bayes is ',mnb.score(X_tfidf_test,y_test))
print(classification_report(y_test,y_tfidf_predict,target_names=news.target_names))
2. 특징 선별
특징 선별 은 PCA 와 같은 주성 분 을 선택 하여 특징 을 재건 하 는 방법 과 약간 차이 가 있 습 니 다. PCA 에 있어 우 리 는 재건 축 후의 특징 을 설명 할 수 없 지만 특징 선별 은 특징 치 에 대한 수정 이 존재 하지 않 고 모델 의 성능 향상 에 비교적 큰 소량의 특징 을 찾 는 데 중심 을 두 고 있 습 니 다. 우 리 는 sklearn 의 feature 를 사용 합 니 다.selection 모듈 에서 select Percentile 방법 은 효과 가 뚜렷 한 특징 부터 n 의 특징 을 선택 하여 특징 을 선별 합 니 다.
titanic = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')
y = titanic['survived']
X = titanic.drop(['row.names','name','survived'],axis=1)
X['age'].fillna(X['age'].mean(),inplace=True)
X.fillna('UNKNOWN',inplace=True)
from sklearn.cross_validation import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.25,random_state=33)
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer()
X_train = vec.fit_transform(X_train.to_dict(orient='record'))
X_test = vec.transform(X_test.to_dict(orient='record'))
print (len(vec.feature_names_))
from sklearn.tree import DecisionTreeClassifier
dt = DecisionTreeClassifier(criterion='entropy')
dt.fit(X_train,y_train)
dt.score(X_test,y_test)
# 20%
from sklearn import feature_selection
fs = feature_selection.SelectPercentile(feature_selection.chi2,percentile=20)
X_train_fs = fs.fit_transform(X_train,y_train)
dt.fit(X_train_fs,y_train)
X_test_fs = fs.transform(X_test)
dt.score(X_test_fs,y_test)
#
from sklearn.cross_validation import cross_val_score
import numpy as np
percentiles = range(1,100,2)
results = []
for i in percentiles:
fs = feature_selection.SelectPercentile(feature_selection.chi2,percentile=i)
X_train_fs = fs.fit_transform(X_train,y_train)
scores = cross_val_score(dt,X_train_fs,y_train,cv=5)
results = np.append(results,scores.mean())
print (results)
#
opt = np.where(results==results.max())[0][0]
print(opt)
print('Optimal number of features ',percentiles[opt])
3. 교차 검증
진정한 기계 학습 플랫폼 에서 기계 학습 임 무 를 실천 할 때 우 리 는 예측 결 과 를 제출 할 수 있 을 뿐 정 답 을 알 수 없다 는 것 을 알 게 될 것 이다. 그러면 우 리 는 기 존의 데 이 터 를 충분히 사용 해 야 한다. 일반적인 방법 을 할 때 기 존의 데 이 터 를 샘플링 분할 하고 일 부 는 모델 파라미터 훈련 에 사용 하 며 일 부 는 모델 설정 과 특징 선택 을 조절 하 는 데 사용 해 야 한다.또한 알 수 없 는 테스트 성능 을 평가 하 는 것 을 검증 집합 (Validation) 이 라 고 하 는데 검증 절차 의 복잡 도 에 따라 모델 검사 방식 은 하나의 검증 과 교차 검증 으로 나 뉜 다.
titanic = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')
y = titanic['survived']
X = titanic.drop(['row.names','name','survived'],axis=1)
X['age'].fillna(X['age'].mean(),inplace=True)
X.fillna('UNKNOWN',inplace=True)
from sklearn.cross_validation import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.25,random_state=33)
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer()
X_train = vec.fit_transform(X_train.to_dict(orient='record'))
X_test = vec.transform(X_test.to_dict(orient='record'))
from sklearn.cross_validation import cross_val_score
fs = feature_selection.SelectPercentile(feature_selection.chi2,percentile=i)
X_train_fs = fs.fit_transform(X_train,y_train)
scores = cross_val_score(dt,X_train_fs,y_train,cv=5)
print (scores.mean())
4. 격자 검색
일반적인 상황 에서 모델 은 많은 매개 변 수 를 설정 해 야 한다. 이런 매개 변 수 는 우 리 는 일반적으로 모델 의 초 매개 변수 라 고 부른다. 예 를 들 어 K 근린 중의 K 값, 벡터 기 중의 서로 다른 핵 함수 등 을 지원 한다. 대부분 상황 에서 초 매개 변수의 선택 은 무한 하기 때문에 유한 한 시간 안에 인공 적 으로 몇 가지 초 매개 변수 조합 을 미리 설정 한 것 을 검증 할 수 있 는 것 을 제외 하고또한 계발 식 검색 방법 을 통 해 초 파라미터 조합 을 조정 할 수 있 는데 이런 계발 식 초 파라미터 검색 방법 을 격자 검색 이 라 고 부른다.
from sklearn.datasets import fetch_20newsgroups
news = fetch_20newsgroups(subset='all')
from sklearn.cross_validation import train_test_split
X_train,X_test,y_train,y_test = train_test_split(news.data[:3000],news.target[:3000],test_size=0.25,random_state=33)
from sklearn.feature_extraction.text import TfidfVectorizer
vec = TfidfVectorizer()
X_count_train = vec.fit_transform(X_train)
X_count_test = vec.transform(X_test)
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
# pipeline ,
clf = Pipeline([
('vect',TfidfVectorizer(stop_words='english',analyzer='word')),('svc',SVC())
])
parameters = {
'svc__gamma':np.logspace(-2,1,4),
'svc__C':np.logspace(-1,1,3)
}
#n_jobs=-1 CPU
from sklearn.grid_search import GridSearchCV
gs = GridSearchCV(clf,parameters,verbose=2,refit=True,cv=3,n_jobs=-1)
%time _=gs.fit(X_train,y_train)
print (gs.best_params_,gs.best_score_)
print (gs.score(X_test,y_test))
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.