Python 과 Scikit-learn 기반 기계 학습 탐색
8980 단어 pythonscikit-learn
저 는 Alex 라 고 합 니 다.저 는 기계 학습 과 인터넷 그림 분석(주로 이론)을 섭렵 했 습 니 다.나 는 동시에 러시아 모 바 일 운영 업 체 를 위해 빅 데이터 제품 을 개발 하고 있다.이것 은 내 가 처음으로 인터넷 에서 글 을 쓰 는 것 이 니,뿌 려 서 는 안 된다.
현재 많은 사람들 이 효율 적 인 알고리즘 을 개발 하고 기계 학습 대회 에 참가 하고 싶 어 한다.그래서 그들 은 나 에 게"어떻게 시작 해 야 합 니까?"라 고 물 었 다.한때 나 는 러시아 연방정부 의 산하 기관 에서 언론 과 소 셜 네트워크 빅 데이터 분석 도구 의 개발 을 이 끌 었 다.나 는 여전히 우리 팀 이 사용 한 문서 가 있 으 니,나 는 기꺼이 당신들 과 공유 하 겠 습 니 다.전 제 는 독자 들 이 이미 좋 은 수학 과 기계 학습 분야 의 지식 을 가지 고 있다 는 것 이다.
이 글 은 데이터 과학 에 대한 소개 인 데,이 학 과 는 최근 에 너무 인기 가 많다.기계 학습 의 경쟁 도 점점 많아 지고(예 를 들 어 Kaggle,TudedIT)그들의 자금 은 보통 상당 하 다.
R 과 Python 은 데이터 과학자 들 에 게 가장 많이 사용 되 는 두 가지 도구 이다.모든 도 구 는 장단 점 이 있 지만 파 이 썬 은 최근 에 여러 가지 측면 에서 이 겼 다.이 모든 것 은 Scikit-learn 라 이브 러 리 의 하늘 로 올 라 가 완벽 한 문서 와 풍부 한 기계 학습 알고리즘 을 포함 하고 있 기 때문이다.
우 리 는 주로 이 글 에서 기계 학습 알고리즘 을 연구 할 것 이 니 주의 하 십시오.보통 Pandas 패키지 로 메 인 데이터 분석 을 하 는 것 이 좋 고 스스로 완성 하기 쉽다.그래서 실현 에 집중 하 자.확실성 을 위해 우 리 는 하나의 특징-대상 행렬 을 입력 으로 하고*.csv 파일 에 존재 한다 고 가정 합 니 다.
데이터 로드
우선 데 이 터 를 메모리 에 불 러 와 야 조작 할 수 있 습 니 다.Scikit-learn 라 이브 러 리 는 구현 에 NumPy 배열 을 사 용 했 기 때문에 NumPy 로*.csv 파일 을 불 러 올 것 입 니 다.UCI Machine Learning Repository에서 그 중의 데이터 세트 를 다운로드 합 시다.
import numpy as np
import urllib
# url with dataset
url = “http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data”
# download the file
raw_data = urllib.urlopen(url)
# load the CSV file as a numpy matrix
dataset = np.loadtxt(raw_data, delimiter=“,”)
# separate the data from the target attributes
X = dataset[:,0:7]
y = dataset[:,8]
우 리 는 아래 의 모든 예 에서 이 데이터 그룹 을 사용 할 것 입 니 다.다시 말 하면 X 특징 물 배열 과 y 목표 변수의 값 을 사용 할 것 입 니 다.데이터 표준화
우 리 는 대부분의 경사도 방법(거의 모든 기계 학습 알고리즘 이 이 를 바탕 으로)이 데이터 의 크기 조정 에 민감 하 다 는 것 을 알 고 있다.따라서 알고리즘 을 실행 하기 전에 표준화 나 이른바 규격 화 를 해 야 한다.표준 화 는 모든 특징의 이름 값 을 바 꾸 어 각각 0 과 1 사이 에 있 도록 하 는 것 을 포함한다.규격 화 에 대해 서 는 데이터 의 예비 처 리 를 포함 하여 모든 특징의 값 이 0 과 1 의 차이 가 있 게 한다.Scikit-learn 라 이브 러 리 는 이미 그 에 상응하는 함 수 를 제공 했다.
from sklearn
import metrics
from sklearn.ensemble
import ExtraTreesClassifier
model = ExtraTreesClassifier()
model.fit(X, y)# display the relative importance of each attribute
print(model.feature_importances_)
특징의 선택의심 할 여지없이 한 문 제 를 해결 하 는 데 가장 중요 한 것 은 특징 을 적절하게 선택 하고 심지어 특징 을 창조 하 는 능력 이다.이것 은 특징 선택 과 특징 공정 이 라 고 한다.특징 공 사 는 상당히 창조 적 인 과정 이지 만 가끔 은 직관 과 전문 적 인 지식 에 의존 하지만 특징 에 대한 선택 은 이미 많은 알고리즘 을 직접 사용 할 수 있다.트 리 알고리즘 과 같이 특징의 정 보 량 을 계산 할 수 있다.
from sklearn
import metrics
from sklearn.ensemble
import ExtraTreesClassifier
model = ExtraTreesClassifier()
model.fit(X, y)# display the relative importance of each attribute
print(model.feature_importances_)
다른 모든 방법 은 특징 부분 집합 에 대한 효율 적 인 검색 을 바탕 으로 가장 좋 은 부분 집합 을 찾 는 것 으로 진화 한 모델 이 이 부분 집합 에서 가장 좋 은 품질 을 가 진 다 는 것 을 의미한다.재 귀적 특징 제거 알고리즘(RFE)은 이러한 검색 알고리즘 중 하나 이 며,Scikit-learn 라 이브 러 리 역시 제공 합 니 다.
from sklearn.feature_selection
import RFE
from sklearn.linear_model
import LogisticRegression
model = LogisticRegression()# create the RFE model and select 3 attributes
rfe = RFE(model, 3)
rfe = rfe.fit(X, y)# summarize the selection of the attributes
print(rfe.support_)
print(rfe.ranking_)
알고리즘 개발내 가 말 한 것 처럼 Scikit-learn 라 이브 러 리 는 이미 모든 기본 기계 학습 알고리즘 을 실현 했다.그들 중 일 부 를 보 겠 습 니 다.
논리 회귀
대부분의 경우 분류 문제(이원 분류)를 해결 하 는 데 사용 되 지만 여러 가지 분류(이른바 한 쌍 의 다 중 방법)도 적용 된다.이 알고리즘 의 장점 은 모든 출력 대상 에 대응 하 는 분류 확률 이 있다 는 것 이다.
from sklearn
import metrics
from sklearn.linear_model
import LogisticRegression
model = LogisticRegression()
model.fit(X, y)
print(model)# make predictions
expected = y
predicted = model.predict(X)# summarize the fit of the model
print(metrics.classification_report(expected, predicted))
print(metrics.confusion_matrix(expected, predicted))
소박 한 베 이 루스그것 도 가장 유명한 기계 학습 알고리즘 중 하나 로 훈련 견본 의 데이터 분포 밀 도 를 회복 하 는 것 이 주요 임무 이다.이 방법 은 통상 여러 종류의 분류 문제 에서 매우 잘 표현 된다.
from sklearn
import metrics
from sklearn.naive_bayes
import GaussianNB
model = GaussianNB()
model.fit(X, y)
print(model)# make predictions
expected = y
predicted = model.predict(X)# summarize the fit of the model
print(metrics.classification_report(expected, predicted))
print(metrics.confusion_matrix(expected, predicted))
근린kNN(k-최근 이웃)방법 은 보통 더 복잡 한 분류 알고리즘 의 일부분 에 사용 된다.예 를 들 어 우 리 는 그것 의 평가 치 를 대상 의 특징 으로 할 수 있다.때로는 간단 한 kNN
from sklearn
import metrics
from sklearn.neighbors
import KNeighborsClassifier# fit a k - nearest neighbor model to the data
model = KNeighborsClassifier()
model.fit(X, y)
print(model)# make predictions
expected = y
predicted = model.predict(X)# summarize the fit of the model
print(metrics.classification_report(expected, predicted))
print(metrics.confusion_matrix(expected, predicted))
결정 트 리분류 와 회귀 트 리(CART)는 이러한 문제 에 자주 사용 되 는데 이런 문제 에서 대상 은 분류 할 수 있 는 특징 이 있 고 회귀 와 분류 문제 에 사용 된다.의사 결정 트 리 는 여러 가지 분류 에 매우 적합 하 다.
from sklearn
import metrics
from sklearn.tree
import DecisionTreeClassifier# fit a CART model to the data
model = DecisionTreeClassifier()
model.fit(X, y)
print(model)# make predictions
expected = y
predicted = model.predict(X)# summarize the fit of the model
print(metrics.classification_report(expected, predicted))
print(metrics.confusion_matrix(expected, predicted))
지원 벡터SVM(벡터 지원)은 가장 유행 하 는 기계 학습 알고리즘 중 하나 로 주로 문 제 를 분류 하 는 데 사용 된다.마찬가지 로 논리 적 회귀 에 도 사용 되 며 SVM 은 여러 가지 방법의 도움 을 받 아 여러 가지 분 류 를 실현 할 수 있다.
from sklearn import metrics
from sklearn.svm import SVC
# fit a SVM model to the data
model = SVC()
model.fit(X, y)
print(model)
# make predictions
expected = y
predicted = model.predict(X)
# summarize the fit of the model
print(metrics.classification_report(expected, predicted))
print(metrics.confusion_matrix(expected, predicted))
분류 와 회귀 문 제 를 제외 하고 Scikit-learn 은 대량의 복잡 한 알고리즘 도 있 는데 집합 과 혼합 알고리즘 을 구축 하 는 실현 기술,예 를 들 어 Bagging 과 Boosting 등 을 포함한다.어떻게 알고리즘 의 매개 변 수 를 최적화 합 니까?
효율 적 인 알고리즘 을 만 드 는 과정 에서 가장 어 려 운 절차 중 하 나 는 정확 한 매개 변수의 선택 이다.일반적으로 경험 이 있 으 면 좀 쉬 울 수 있 지만,어쨌든 우 리 는 찾 아야 한다.다행히도 Scikit-Leurn 은 이 문 제 를 해결 하 는 데 많은 함 수 를 제공 했다.
예 를 들 어 규칙 화 된 매개 변수의 선택 을 살 펴 보 겠 습 니 다.그 중에서 적지 않 은 값 이 연이어 검색 되 었 습 니 다.
import numpy as np
from sklearn.linear_model
import Ridge
from sklearn.grid_search
import GridSearchCV# prepare a range of alpha values to test
alphas = np.array([1, 0.1, 0.01, 0.001, 0.0001, 0])# create and fit a ridge regression model, testing each alpha
model = Ridge()
grid = GridSearchCV(estimator = model, param_grid = dict(alpha = alphas))
grid.fit(X, y)
print(grid)# summarize the results of the grid search
print(grid.best_score_)
print(grid.best_estimator_.alpha)
가끔 은 무 작위 로 정 해진 범위 에서 하나의 매개 변 수 를 선택 하 는 것 이 더욱 효율 적 이 고 이 매개 변수 에서 알고리즘 의 질 을 평가 한 다음 에 가장 좋 은 것 을 선택한다.
import numpy as np
from scipy.stats
import uniform as sp_rand
from sklearn.linear_model
import Ridge
from sklearn.grid_search
import RandomizedSearchCV# prepare a uniform distribution to sample
for the alpha parameter
param_grid = {‘
alpha': sp_rand()
}#
create and fit a ridge regression model, testing random alpha values
model = Ridge()
rsearch = RandomizedSearchCV(estimator = model, param_distributions = param_grid, n_iter = 100)
rsearch.fit(X, y)
print(rsearch)# summarize the results of the random parameter search
print(rsearch.best_score_)
print(rsearch.best_estimator_.alpha)
이로써 우 리 는 결 과 를 파일 에 다시 출력 하 는 것 을 제외 하고 Scikit-learn 라 이브 러 리 를 사용 하 는 모든 과정 을 보 았 다.이것 은 당신 의 연습 으로 삼 아 보 세 요.R 에 비해 Python 의 큰 장점 은 좋 은 문서 설명 이 있다 는 것 입 니 다.총결산
이상 은 바로 본 고 에서 Python 과 Scikit-learn 을 바탕 으로 하 는 기계 학습 탐색 에 관 한 모든 내용 입 니 다.관심 이 있 는 친 구 는python 정렬 알고리즘 총화 및 인 스 턴 스 상세 설명,자바 몬 테 카 를 로 알고리즘 원주 율 유사 치 인 스 턴 스 상세 설명,자바 흔 한 데이터 구조 면접 문제(답 포함)과 본 사이트 의 다른 관련 주 제 를 참고 할 수 있 습 니 다.부족 한 점 이 있 으 면 댓 글 에 지적 한 바 를 환영 합 니 다.편집장 은 반드시 신속하게 여러분 에 게 답 하고 수정 하여 많은 프로 그래 밍 마니아 들 에 게 더욱 좋 은 글 과 더 좋 은 도움 을 제공 할 것 입 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.