강의 중 잡담?
데이터과학? 가정(또는 인식)을 검증하는것
나이팅게일의 로즈다이어그램
나폴레옹의 행진
파이썬 자주 변할 수 있기에 결과위주로 공부할것
시스템모델 시뮬레이션\현상을 표현하는 도구-수학 mat lab
디지털 필터 디자인(주파수) OIS
오픈소스 3D프린터
<사이킷런 대표적인 절차>
알고리즘을 돌리기 위해선 문자 -> 숫자로 변환이 필요
from sklearn.preprocessing import LabelEncoder
le=LabelEncoder()
le.fit(df['A'])
le.classes_ #array(['a', 'b', 'c']
df['le_A'] = le.transform(df['A'])
#동시에
le.fit_transform(df['A'])
#하나씩 조회 가능
le.transform(['a']) #array([0])
#역변환
le.inverse_transform(df['le_A']) #array(['a', 'b', 'c', 'a', 'b']
from sklearn.preprocessing import MinMaxScaler,StandardScaler,RobustScaler
mms = MinMaxScaler()
mms.fit(df)
df_mms = mms.transform(df)
#min,max,크기 조회 가능
mms.data_max_, mms.data_min_, mms.data_range_
#역변환 가능
mms.inverse_transform(df_mms)
한번에 적용
# mms.fit_transform(df)
ss = StandardScaler()
df_ss = ss.transform(df)
#평균,표준편차 조회 가능
ss.mean_,ss.scale_
< sns.boxenplot >
from sklearn.pipeline import Pipeline #다른게 import 되어있다는 가정하에
estimators= [
('scaler', StandardScaler()), #import ss필요
('clf', DecisionTreeClassifier()) #import decision clf필요
]
pipe = Pipeline(estimators)
pipe.steps #[('scaler', StandardScaler()), ('clf', DecisionTreeClassifier())]
#따로 객체 호출해 사용가능
pipe.steps[0]
pipe['scaler']
#속성지정 (__)
pipe.set_params(clf__max_depth=2)
pipe.set_params(clf__random_state=13)
wine_tree= pipe.fit(X_train, y_train)
-> 이후 accuracy_score 가능
예> k가 5이라면(5를 많이 사용) train을 5등분 나눔
from sklearn.model_selection import KFold
kf = KFold(n_splits=2)
print(kf.get_n_splits(X)) #2
print(kf) #KFold(n_splits=2, random_state=None, shuffle=False)
예> X= np.array([[1,2],[3,4],[5,6],[7,8]])
for train_idx, test_idx in kf.split(X): #test라고 써있지만 vaildation
print('--- idx')
print(train_idx,test_idx)
print('--- train data')
print(X[train_idx])
print('--- vaildation data')
print(X[test_idx])
cv_accuracy = []
for train_idx, test_idx in kfold.split(X):
X_train, X_test = X.iloc[train_idx], X.iloc[test_idx]
y_train, y_test = y.iloc[train_idx], y.iloc[test_idx]
df_cv = DecisionTreeClassifier() #다른 알고리즘 가능
df_cv.fit(X_train,y_train)
pred = df_cv.predict(X_test)
cv_accuracy.append(accuracy_score(y_test, pred))
cv_accuracy
# 각 acc의 분산이 크지 않다면 평균을 대표값
np.mean(cv_accuracy)
: 그 각각의 1/5이 클래스 비율 맞춰 교차검증
from sklearn.model_selection import StratifiedKFold
skfold = StratifiedKFold(n_splits=5)
...<중간 생략>...
for train_idx, test_idx in skfold.split(X, y) #여기선 y언급 필요
# validation score 확인
from sklearn.model_selection import cross_val_score
skfold = StratifiedKFold(n_splits=5)
cross_val_score(df_cv, X, y, cv=skfold) #df_cv명시 후
# train score도 같이 확인하려면?
from sklearn.model_selection import cross_validate
cross_validate(df_cv, X, y, cv=skfold, return_train_score=True)
from sklearn.model_selection import GridSearchCV
params = {'max_depth':[2,4,7,10]} #DecisionTreeClassifier기준
df_clf = DecisionTreeClassifier()
gridsearch = GridSearchCV(estimator=df_clf, #알고리즘(분류기)
param_grid=params, #파라미터
cv=5) #교차검증
gridsearch.fit(X, y)
# 결과
# 각 하이퍼파라미터에 따른 test_score등 확인 가능
import pprint
pp= pprint.PrettyPrinter(indent=4)
pp.pprint(gridsearch.cv_results_)
# 조회
gridsearch.best_estimator_ #best 모델 조회
gridsearch.best_score_ #best test 점수 조회
gridsearch.best_params_ #best 파라미터 조회
pipe = Pipeline(estimators)
param_grid = [{'clf__max_depth':[2,4,7,10]}]
GridSearch = GridSearchCV(estimator=pipe, param_grid=param_grid, cv=5)
GridSearch.fit(X, y)
score_df = pd.DataFrame(GridSearch.cv_results_)
#필요한 것만
score_df[['params','rank_test_score','mean_test_score','std_test_score']]
Feature Engineering: 특성을 관찰하고 특성을 머신러닝들이 보다 잘 학습할수있도록 특성을 바꾸거나 새로운 특성을 찾아내는 작업