6강 : 데이터 전처리를 통한 모델링 준비
Raw data가 모델링에 가장 적합한 모양으로 설정되지 않을 수 있습니다. 때로는 데이터의 고유한 구조를 모델링 알고리즘에 가장 잘 표현하기 위해 데이터를 사전 처리해야합니다. 오늘 수업에서는 scikit-learn에서 제공하는 전처리 기능을 사용합니다.
scikit-learn 라이브러리는 데이터 변환을 위한 두 가지 표준 숙어를 제공합니다. 각 변환은 다양한 상황에서 유용합니다: 적합 및 다중 변환 및 결합된 맞춤 및 변환.
모델링을 위해 데이터를 준비하는 데 사용할 수 있는 많은 기술이 있습니다. 예를 들어, 다음 중 일부를 시도해 보십시오.
- 스케일 및 중심 옵션을 사용하여 수치 데이터(예: 평균 0 및 표준 편차 1)를 표준화합니다.
- range 옵션을 사용하여 수치 데이터(예: 0-1 범위)를 정규화 합니다.
- Binarizing과 같은 고급 기능 엔지니어링을 살펴보십시오.
예를 들어, 아래 코드 조각은 당뇨병 데이터 세트의 Pima Indian 발병을 로드하고, 데이터를 표준화하는 데 필요한 매개 변수를 계산한 다음 입력 데이터의 표준화된 사본을 만듭니다.
| # Standardize data (0 mean, 1 stdev) from sklearn.preprocessing import StandardScaler import pandas import numpy url = “https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv” names = [‘preg’, ‘plas’, ‘pres’, ‘skin’, ‘test’, ‘mass’, ‘pedi’, ‘age’, ‘class’] dataframe = pandas.read_csv(url, names=names) array = dataframe.values # separate array into input and output components X = array[:,0:8] Y = array[:,8] scaler = StandardScaler().fit(X) rescaledX = scaler.transform(X) # summarize transformed data numpy.set_printoptions(precision=3) print(rescaledX[0:5,:]) |
7강 : 리샘플링 방법을 사용한 알고리즘 평가
머신러닝 알고리즘을 학습하는 데 사용되는 데이터 세트를 학습 데이터 세트라고 합니다. 알고리즘을 학습하는 데 사용되는 데이터 세트는 새 데이터 모델의 정확도에 대해 신뢰할 수 있는 추정치를 제공하는 데 사용할 수 없습니다. 모델을 만드는 전체 아이디어는 새로운 데이터에 대한 예측을 수행하는 것이기 때문에 이것은 큰 문제입니다.
리샘플링 방법이라는 통계 방법을 사용하여 학습 데이터 세트를 하위 집합으로 분할할 수 있으며, 일부는 모델을 학습하는 데 사용되며 다른 일부는 보류되어 보이지 않는 데이터에 대한 모델의 정확도를 추정하는 데 사용됩니다.
오늘 수업의 목표는 scikit-learn에서 사용할 수있는 다양한 리샘플링 방법을 사용하여 연습하는 것입니다. 예를 들어 :
- 데이터 세트를 학습 및 테스트 집합으로 분할합니다.
- k-fold 교차 검증을 사용하여 알고리즘의 정확도를 추정합니다.
- 원 아웃 교차 유효성 검사를 사용하여 알고리즘의 정확도를 추정합니다.
아래 코드 조각은 scikit-learn을 사용하여 10 배 교차 검증을 사용한 당뇨병 데이터 세트의 Pima Indians 발병에 대한 로지스틱 회귀 알고리즘의 정확성을 추정합니다.
| # Evaluate using Cross Validation from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.linear_model import LogisticRegression url = “https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv” names = [‘preg’, ‘plas’, ‘pres’, ‘skin’, ‘test’, ‘mass’, ‘pedi’, ‘age’, ‘class’] dataframe = read_csv(url, names=names) array = dataframe.values X = array[:,0:8] Y = array[:,8] kfold = KFold(n_splits=10, random_state=7, shuffle=True) model = LogisticRegression(solver=‘liblinear’) results = cross_val_score(model, X, Y, cv=kfold) print(“Accuracy: %.3f%% (%.3f%%)” % (results.mean()*100.0, results.std()*100.0)) |
실행 결과 어떤 정확도를 얻을 수 있었나요?
8강 : 알고리즘 평가 메트릭
데이터 세트에서 머신러닝 알고리즘의 기술을 평가하는 데 사용할 수 있는 다양한 메트릭이 있습니다.
cross_validation.cross_val_score() 함수를 통해 scikit-learn에서 테스트 도구에 사용되는 메트릭을 지정할 수 있으며 회귀 및 분류 문제에 기본값을 사용할 수 있습니다. 오늘 수업의 목표는 scikit-learn 패키지에서 사용할 수있는 다양한 알고리즘 성능 메트릭을 사용하여 연습하는 것입니다.
- 분류 문제에 대해 정확도 및 LogLoss 메트릭을 사용하는 연습을 합니다.
- 혼동 행렬과 분류 보고서를 생성하는 연습을 합니다.
- 회귀 문제에 대해 RMSE 및 RSquared 메트릭을 사용하는 연습을 합니다.
아래 코드 조각은 당뇨병 데이터 세트의 Pima Indians 발병에 대한 LogLoss 메트릭을 계산하는 방법을 보여줍니다.
| # Cross Validation Classification LogLoss from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.linear_model import LogisticRegression url = “https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv” names = [‘preg’, ‘plas’, ‘pres’, ‘skin’, ‘test’, ‘mass’, ‘pedi’, ‘age’, ‘class’] dataframe = read_csv(url, names=names) array = dataframe.values X = array[:,0:8] Y = array[:,8] kfold = KFold(n_splits=10, random_state=7) model = LogisticRegression(solver=‘liblinear’) scoring = ‘neg_log_loss’ results = cross_val_score(model, X, Y, cv=kfold, scoring=scoring) print(“Logloss: %.3f (%.3f)”) % (results.mean(), results.std()) |
어떤 로그 손실이 발생했습니까?
9강 : 스팟 체크 알고리즘
어떤 알고리즘이 데이터에 가장 잘 작동하는지 미리 알 수 없습니다. 시행 착오 과정을 통해 발견해야 합니다. 저는 이것을 스팟 체크 알고리즘이라고 부릅니다. scikit-learn 라이브러리는 많은 머신러닝 알고리즘 및 도구에 대한 인터페이스를 제공하여 이러한 알고리즘의 예상 정확도를 비교합니다.
이 단원에서는 다양한 머신러닝 알고리즘을 스팟 체크하는 연습을 해야 합니다.
- 데이터 세트에서 선형 알고리즘을 스팟 체크합니다(예: 선형 회귀, 로지스틱 회귀 및 선형 판별 분석).
- 데이터 세트에서 일부 비선형 알고리즘 (예 : KNN, SVM 및 CART)을 스팟 확인합니다.
- 데이터 세트에서 몇 가지 정교한 앙상블 알고리즘 (예 : 무작위 포리스트 및 확률적 그라디언트 부스팅)을 스팟 체크하십시오.
예를 들어 아래 스 니펫은 Boston House Price 데이터 세트에서 K-Nearest Neighbors 알고리즘을 스팟 체크합니다.
| # KNN Regression from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.neighbors import KNeighborsRegressor url = “https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.data” names = [‘CRIM’, ‘ZN’, ‘INDUS’, ‘CHAS’, ‘NOX’, ‘RM’, ‘AGE’, ‘DIS’, ‘RAD’, ‘TAX’, ‘PTRATIO’, ‘B’, ‘LSTAT’, ‘MEDV’] dataframe = read_csv(url, delim_whitespace=True, names=names) array = dataframe.values X = array[:,0:13] Y = array[:,13] kfold = KFold(n_splits=10, random_state=7) model = KNeighborsRegressor() scoring = ‘neg_mean_squared_error’ results = cross_val_score(model, X, Y, cv=kfold, scoring=scoring) print(results.mean()) |
어떤 제곱 오류가 발생했습니까?
10강 : 모델 비교 및 선택
데이터 세트에서 머신러닝 알고리즘을 확인하는 방법을 알았으므로 이제 여러 알고리즘의 예상 성능을 비교하고 최상의 모델을 선택하는 방법을 알아야 합니다. 오늘 수업에서는 파이썬의 머신러닝 알고리즘의 정확도와 scikit-learn을 비교하는 연습을 할 것입니다.
- 데이터 세트에서 선형 알고리즘을 서로 비교합니다.
- 데이터 세트에서 비선형 알고리즘을 서로 비교합니다.
- 동일한 알고리즘의 서로 다른 구성을 서로 비교합니다.
- 알고리즘을 비교하는 결과의 플롯을 만듭니다.
아래 예제는 당뇨병 데이터 세트의 Pima Indians 발병에 대한 로지스틱 회귀 및 선형 판별 분석을 서로 비교합니다.
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 | # Compare Algorithms from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.linear_model import LogisticRegression from sklearn.discriminant_analysis import LinearDiscriminantAnalysis # load dataset url = “https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv” names = [‘preg’, ‘plas’, ‘pres’, ‘skin’, ‘test’, ‘mass’, ‘pedi’, ‘age’, ‘class’] dataframe = read_csv(url, names=names) array = dataframe.values X = array[:,0:8] Y = array[:,8] # prepare models models = [] models.append((‘LR’, LogisticRegression(solver=‘liblinear’))) models.append((‘LDA’, LinearDiscriminantAnalysis())) # evaluate each model in turn results = [] names = [] scoring = ‘accuracy’ for name, model in models: kfold = KFold(n_splits=10, random_state=7) cv_results = cross_val_score(model, X, Y, cv=kfold, scoring=scoring) results.append(cv_results) names.append(name) msg = “%s: %f (%f)” % (name, cv_results.mean(), cv_results.std()) print(msg) |
어떤 알고리즘이 더 나은 결과를 얻었습니까? 더 잘할 수 있습니까?
11강 : 알고리즘 튜닝을 통한 정확도 향상
데이터 세트에서 잘 작동하는 하나 또는 두 개의 알고리즘을 찾은 후에는 해당 모델의 성능을 향상시킬 수 있습니다.
알고리즘의 성능을 높이는 한 가지 방법은 매개 변수를 특정 데이터 세트로 조정하는 것입니다.
scikit-learn 라이브러리는 머신러닝 알고리즘에 대한 매개 변수 조합을 검색하는 두 가지 방법을 제공합니다. 오늘 수업의 목표는 각각을 연습하는 것입니다.
- 지정한 그리드 검색을 사용하여 알고리즘의 매개 변수를 조정합니다.
- 무작위 검색을 사용하여 알고리즘의 매개 변수를 조정합니다.
아래 사용 스 니펫은 당뇨병 데이터 세트의 Pima Indians 발병에 대한 리지 회귀 알고리즘에 대한 그리드 검색을 사용하는 예입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # Grid Search for Algorithm Tuning from pandas import read_csv import numpy from sklearn.linear_model import Ridge from sklearn.model_selection import GridSearchCV url = “https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv” names = [‘preg’, ‘plas’, ‘pres’, ‘skin’, ‘test’, ‘mass’, ‘pedi’, ‘age’, ‘class’] dataframe = read_csv(url, names=names) array = dataframe.values X = array[:,0:8] Y = array[:,8] alphas = numpy.array([1,0.1,0.01,0.001,0.0001,0]) param_grid = dict(alpha=alphas) model = Ridge() grid = GridSearchCV(estimator=model, param_grid=param_grid, cv=3) grid.fit(X, Y) print(grid.best_score_) print(grid.best_estimator_.alpha) |
어떤 매개 변수가 최상의 결과를 얻었습니까?
12강 : 앙상블 예측으로 정확성 향상
모델의 성능을 향상시킬 수 있는 또 다른 방법은 여러 모델의 예측을 결합하는 것입니다.
일부 모델은 배깅을 위한 랜덤 포리스트와 부스팅을 위한 확률적 그래디언트 부스팅과 같은 내장 기능을 제공합니다. 투표라고 불리는 또 다른 유형의 앙상블링을 사용하여 여러 다른 모델의 예측을 함께 결합 할 수 있습니다.
오늘 수업에서는 앙상블 방법을 사용하여 연습합니다.
- 무작위 숲과 여분의 나무 알고리즘으로 앙상블을 포장하는 연습을하십시오.
- 그라디언트 부스트 머신과 AdaBoost 알고리즘으로 앙상블을 부스트하는 연습을 해보세요.
- 여러 모델의 예측을 결합하여 투표 앙상블을 연습하십시오.
아래 코드 조각은 당뇨병 데이터 세트의 Pima Indians 발병에 대한 랜덤 포레스트 알고리즘 (의사 결정 트리의 앙상블)을 사용하는 방법을 보여줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # Random Forest Classification from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.ensemble import RandomForestClassifier url = “https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv” names = [‘preg’, ‘plas’, ‘pres’, ‘skin’, ‘test’, ‘mass’, ‘pedi’, ‘age’, ‘class’] dataframe = read_csv(url, names=names) array = dataframe.values X = array[:,0:8] Y = array[:,8] num_trees = 100 max_features = 3 kfold = KFold(n_splits=10, random_state=7) model = RandomForestClassifier(n_estimators=num_trees, max_features=max_features) results = cross_val_score(model, X, Y, cv=kfold) print(results.mean()) |
더 나은 앙상블을 고안 할 수 있습니까?
13강 : 모델 완성 및 저장
머신러닝 문제에서 성능이 좋은 모델을 찾은 후에는 이를 마무리해야 합니다.
오늘 수업에서는 모델 완성과 관련된 작업을 연습합니다. 새 데이터(학습 및 테스트 중에 볼 수 없는 데이터)에 대해 모델을 사용하여 예측을 수행하는 연습을 합니다. 학습된 모델을 파일에 저장하고 다시 로드하는 연습을 합니다.
예를 들어 아래 코드 조각은 로지스틱 회귀 모델을 만들어 파일에 저장한 다음 나중에 로드하고 보이지 않는 데이터에 대한 예측을 수행하는 방법을 보여 줍니다.
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 | # Save Model Using Pickle from pandas import read_csv from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression import pickle url = “https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv” names = [‘preg’, ‘plas’, ‘pres’, ‘skin’, ‘test’, ‘mass’, ‘pedi’, ‘age’, ‘class’] dataframe = read_csv(url, names=names) array = dataframe.values X = array[:,0:8] Y = array[:,8] test_size = 0.33 seed = 7 X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size, random_state=seed) # Fit the model on 67% model = LogisticRegression(solver=‘liblinear’) model.fit(X_train, Y_train) # save the model to disk filename = ‘finalized_model.sav’ pickle.dump(model, open(filename, ‘wb’)) # some time later… # load the model from disk loaded_model = pickle.load(open(filename, ‘rb’)) result = loaded_model.score(X_test, Y_test) print(result) |
14강 : Hello World 종단간 프로젝트
이제 예측 모델링 머신러닝 문제의 각 작업을 완료하는 방법을 알아보았습니다. 오늘 수업에서는 조각을 모으고 표준 머신러닝 데이터 세트를 종단간 작업하는 연습을 해야 합니다. 홍채 데이터 세트를 종단 간 작업(머신러닝의 Hello World)
여기에는 다음 단계가 포함됩니다.
- 설명 통계 및 시각화를 사용하여 데이터를 이해합니다.
- 문제의 구조를 가장 잘 노출하기 위해 데이터를 전처리합니다.
- 자신의 테스트 도구를 사용하여 여러 알고리즘을 스팟 검사합니다.
- 알고리즘 매개 변수 튜닝을 사용하여 결과를 개선합니다.
- 앙상블 방법을 사용하여 결과를 개선합니다.
- 나중에 사용할 수 있도록 모델을 마무리합니다.
어떤 모델을 사용했고 어떤 결과를 얻었습니까?
당신이 얼마나 멀리 왔는지 보십시오
잠시 시간을내어 당신이 얼마나 멀리 왔는지 되돌아보십시오.
- 머신러닝에 대한 관심과 Python을 사용하여 머신러닝을 연습하고 적용 할 수 있기를 바라는 강한 열망으로 시작했습니다.
- Python을 다운로드, 설치 및 시작했으며, 아마도 처음으로 언어의 구문에 익숙해지기 시작했습니다.
- 여러 가지 교훈을 통해 천천히 그리고 꾸준히 예측 모델링 머신러닝 프로젝트의 표준 작업이 Python 플랫폼에 매핑되는 방법을 배웠습니다.
- Python을 사용하여 첫번째 머신러닝 문제를 종단간 해결한 일반적인 머신러닝 작업에 대한 레시피를 기반으로 구축합니다.
- 표준 템플릿을 사용하면 수집 한 조리법과 경험을 통해 새롭고 다른 예측 모델링 머신러닝 문제를 스스로 해결할 수 있습니다.
이것은 파이썬을 사용한 머신러닝 여정의 시작에 불과합니다. 계속 연습하고 기술을 개발하십시오.