알아야 할 Python에서 가장 많이 사용되는 기계 학습 알고리즘 7가지
게시 됨: 2021-03-04머신 러닝은 모든 데이터에 사용되는 컴퓨터 알고리즘을 다루는 인공 지능(AI)의 한 분야입니다. 입력되는 데이터에서 자동으로 학습하는 데 중점을 두고 매번 이전 예측을 개선하여 결과를 제공합니다.
목차
Python에서 사용되는 상위 머신 러닝 알고리즘
다음은 코드 조각과 함께 Python에서 사용되는 최고의 기계 학습 알고리즘 중 일부이며 분류 경계의 구현 및 시각화를 보여줍니다.
1. 선형 회귀
선형 회귀는 가장 일반적으로 사용되는 지도 머신 러닝 기술 중 하나입니다. 이름에서 알 수 있듯이 이 회귀는 선형 방정식을 사용하고 해당 선을 관찰된 데이터에 맞추는 두 변수 간의 관계를 모델링하려고 합니다. 이 기법은 총 판매액 또는 주택 비용과 같은 실제 연속 값을 추정하는 데 사용됩니다.
가장 잘 맞는 선을 회귀선이라고도 합니다. 다음 방정식으로 제공됩니다.
Y = a*X + b
여기서 Y는 종속 변수, 기울기, X는 독립 변수, b는 절편 값입니다. 계수 a와 b는 다양한 데이터 포인트와 회귀선 방정식 사이의 거리 차이의 제곱을 최소화하여 파생됩니다.
# 단순 회귀를 위한 합성 데이터 세트
sklearn.datasets에서 make_regression 가져오기
plt.Figure()
plt.title( '하나의 입력 변수에 대한 샘플 회귀 문제' )
X_R1, y_R1 = make_regression( n_samples = 100, n_features = 1, n_informative = 1, 바이어스 = 150.0, 노이즈 = 30, random_state = 0 )
plt.scatter( X_R1, y_R1, 마커 = 'o', s = 50 )
plt.show()
sklearn.linear_model에서 LinearRegression 가져오기
X_train, X_test, y_train, y_test = train_test_split( X_R1, y_R1,
random_state = 0 )
linreg = LinearRegression().fit( X_train, y_train )
print( '선형 모델 계수(w): {}'.format( linreg.coef_ ) )
print( '선형 모델 절편(b): {:.3f}'z.format( linreg.intercept_ ) )
print( 'R-제곱 점수(훈련): {:.3f}'.format( linreg.score( X_train, y_train ) ) )
print( 'R-제곱 점수(테스트): {:.3f}'.format( linreg.score( X_test, y_test ) ) )
산출
선형 모델 계수(w): [ 45.71]
선형 모델 절편(b): 148.446
R-제곱 점수(훈련): 0.679
R-제곱 점수(검정): 0.492
다음 코드는 데이터 포인트의 플롯에 적합 회귀선을 그립니다.
plt.Figure( figsize = ( 5, 4 ) )
plt.scatter( X_R1, y_R1, 마커 = 'o', s = 50, 알파 = 0.8 )
plt.plot( X_R1, linreg.coef_ * X_R1 + linreg.intercept_, 'r-')
plt.title( '최소제곱 선형 회귀' )
plt.xlabel( '특성 값(x)' )
plt.ylabel( '목표값(y)' )
plt.show()
분류 기술 탐색을 위한 공통 데이터 세트 준비
다음 데이터는 Python에서 기계 학습에서 가장 일반적으로 사용되는 다양한 분류 알고리즘을 보여주는 데 사용됩니다.
UCI 버섯 데이터 세트 는 버섯.csv 에 저장됩니다.
%matplotlib 노트북
pandas를 pd로 가져오기
numpy를 np로 가져오기
matplotlib.pyplot을 plt로 가져오기
sklearn.decomposition에서 PCA 가져오기
sklearn.model_selection import train_test_split에서
df = pd.read_csv( '읽기 전용/버섯.csv' )
df2 = pd.get_dummies( df )
df3 = df2.sample( frac = 0.08 )
X = df3.iloc[:, 2:]
y = df3.iloc[:, 1]
pca = PCA( n_components = 2 ).fit_transform( X )
X_train, X_test, y_train, y_test = train_test_split(pca, y, random_state = 0)
plt.Figure(dpi = 120)
plt.scatter( pca[y.values == 0, 0], pca[y.values == 0, 1], alpha = 0.5, label = '식용', s = 2 )
plt.scatter( pca[y.values == 1, 0], pca[y.values == 1, 1], alpha = 0.5, label = 'Poisonous', s = 2 )
plt.legend()
plt.title( '버섯 데이터 세트\n처음 두 가지 주요 구성 요소' )
plt.xlabel( 'PC1' )
plt.ylabel( 'PC2' )
plt.gca().set_aspect( '같음' )
아래에 정의된 함수를 사용하여 버섯 데이터셋에 사용할 다양한 분류기의 결정 경계를 얻습니다.
def plot_mushroom_boundary( X, y, 맞는_모델 ):
plt.Figure( figsize = (9.8, 5), dpi = 100 )
i의 경우 enumerate( ['Decision Boundary', 'Decision Probabilities'] )의 plot_type:
plt.subplot( 1, 2, i + 1 )
mesh_step_size = 0.01 # 메쉬의 단계 크기
x_min, x_max = X[:, 0].min() – .1, X[:, 0].max() + .1
y_min, y_max = X[:, 1].min() – .1, X[:, 1].max() + .1
xx, yy = np.meshgrid( np.arange( x_min, x_max, mesh_step_size ), np.arange( y_min, y_max, mesh_step_size ) )
내가 == 0인 경우:
Z = fited_model.predict( np.c_[xx.ravel(), yy.ravel()] )
또 다른:
노력하다:
Z = fit_model.predict_proba( np.c_[xx.ravel(), yy.ravel()] )[:, 1]
제외하고:
plt.text( 0.4, 0.5, '사용할 수 없는 확률', horizontalalignment = 'center', verticalalignment = 'center', transform = plt.gca().transAxes, fontsize = 12 )
plt.axis( '꺼짐')
부서지다
Z = Z.reshape( xx.shape )
plt.scatter( X[y.values == 0, 0], X[y.values == 0, 1], alpha = 0.4, label = 'Edible', s = 5 )
plt.scatter( X[y.values == 1, 0], X[y.values == 1, 1], alpha = 0.4, label = 'Posionous', s = 5 )
plt.imshow( Z, 보간 = '가장 가까운', cmap = 'RdYlBu_r', 알파 = 0.15, 범위 = ( x_min, x_max, y_min, y_max ), 원점 = 'lower')
plt.title( plot_type + '\n' + str( fit_model ).split( '(' )[0] + ' 테스트 정확도: ' + str( np.round( fit_model.score( X, y ), 5 ) ) )
plt.gca().set_aspect( '같음' );
plt.tight_layout()
plt.subplots_adjust( 상단 = 0.9, 하단 = 0.08, wspace = 0.02 )
2. 로지스틱 회귀
선형 회귀와 달리 로지스틱 회귀는 이산 값(0/1 이진 값, 참/거짓, 예/아니요)의 추정을 처리합니다. 이 기술을 로짓 회귀라고도 합니다. 주어진 데이터를 훈련시키기 위해 로짓 함수를 사용하여 사건의 확률을 예측하기 때문입니다. 값은 항상 0과 1 사이에 있습니다(확률을 계산하기 때문에).
결과의 로그 확률은 다음과 같이 예측 변수의 선형 조합으로 구성됩니다.
확률 = p / (1 – p) = 이벤트가 발생할 확률 또는 이벤트가 발생하지 않을 확률
ln( 배당률 ) = ln( p / (1 – p) )
로짓( p ) = ln( p / (1 – p) ) = b0 + b1X1 + b2X2 + b3X3 + … + bkXk
여기서 p는 특성이 존재할 확률입니다.
sklearn.linear_model에서 LogisticRegression 가져오기
모델 = LogisticRegression()
model.fit( X_train, y_train )
plot_mushroom_boundary( X_test, y_test, 모델 )
세계 최고의 대학에서 온라인으로 인공 지능 인증 을 받으십시오 . 석사, 중역 포스트 대학원 프로그램 및 ML 및 AI 고급 인증 프로그램에서 경력을 빠르게 추적할 수 있습니다.
3. 의사결정 트리
이것은 데이터의 연속 변수와 이산 변수를 모두 분류하는 데 사용할 수 있는 매우 인기 있는 알고리즘입니다. 모든 단계에서 데이터는 일부 분할 속성/조건에 따라 둘 이상의 동종 세트로 분할됩니다.
sklearn.tree에서 DecisionTreeClassifier 가져오기
모델 = DecisionTreeClassifier( max_depth = 3 )
model.fit( X_train, y_train )
plot_mushroom_boundary( X_test, y_test, 모델 )
4. SVM
SVM은 Support Vector Machines의 약자입니다. 여기서 기본 아이디어는 분리를 위해 초평면을 사용하여 데이터 포인트를 분류하는 것입니다. 목표는 두 클래스 또는 범주의 데이터 포인트 사이에 최대 거리(또는 마진)가 있는 초평면을 찾는 것입니다.
우리는 미래에 알려지지 않은 점을 가장 높은 확신으로 분류하는 방식으로 비행기를 선택합니다. SVM은 매우 적은 계산 능력을 차지하면서 높은 정확도를 제공하기 때문에 유명하게 사용됩니다. SVM은 회귀 문제에도 사용할 수 있습니다.
sklearn.svm 가져오기 SVC에서
모델 = SVC( 커널 = '선형' )
model.fit( X_train, y_train )
plot_mushroom_boundary( X_test, y_test, 모델 )
체크아웃: GitHub의 Python 프로젝트
5. 나이브 베이즈
이름에서 알 수 있듯이 Naive Bayes 알고리즘은 Bayes Theorem 을 기반으로 하는 지도 학습 알고리즘 입니다. Bayes Theorem은 조건부 확률을 사용하여 주어진 지식을 기반으로 한 사건의 확률을 제공합니다.
어디에,
P(A | B): 사건 B가 이미 발생했다고 가정할 때 사건 A가 발생할 조건부 확률. (사후 확률이라고도 함)
P(A): 사건 A의 확률.
P(B): 사건 B의 확률.
P(B | A): 사건 A가 이미 발생했다고 가정할 때 사건 B가 발생할 조건부 확률.
이 알고리즘의 이름이 Naive인 이유는 무엇입니까? 이는 모든 이벤트 발생이 서로 독립적이라고 가정하기 때문입니다. 따라서 각 기능은 서로 종속되지 않고 데이터 포인트가 속한 클래스를 별도로 정의합니다. Naive Bayes는 텍스트 분류에 가장 적합한 선택입니다. 적은 양의 훈련 데이터로도 충분히 잘 작동합니다.
sklearn.naive_bayes에서 GaussianNB 가져오기
모델 = GaussianNB()
model.fit( X_train, y_train )
plot_mushroom_boundary( X_test, y_test, 모델 )
5. KNN
KNN은 K-Nearest Neighbours의 약자입니다. 이전에 분류된 훈련 데이터와의 유사성에 따라 테스트 데이터를 분류하는 매우 널리 사용되는 지도 학습 알고리즘입니다. KNN은 훈련 중에 모든 데이터 포인트를 분류하지 않습니다. 대신 데이터 세트만 저장하고 새 데이터를 가져오면 유사성을 기반으로 해당 데이터 포인트를 분류합니다. 이는 해당 데이터 포인트 의 K개의 가장 가까운 이웃(여기서는 n_neighbors )의 유클리드 거리를 계산하여 수행합니다.
sklearn.neighbors에서 KNeighborsClassifier 가져오기
모델 = KNeighborsClassifier( n_neighbors = 20 )
model.fit( X_train, y_train )
plot_mushroom_boundary( X_test, y_test, 모델 )
6. 랜덤 포레스트
랜덤 포레스트는 지도 학습 기법을 사용하는 매우 간단하고 다양한 기계 학습 알고리즘입니다. 이름에서 짐작할 수 있듯이 랜덤 포레스트는 앙상블 역할을 하는 많은 수의 의사 결정 트리로 구성됩니다. 각 의사 결정 트리는 데이터 포인트의 출력 클래스를 파악하고 대다수 클래스가 모델의 최종 출력으로 선택됩니다. 여기서 아이디어는 동일한 데이터에 대해 작업하는 더 많은 나무가 개별 나무보다 결과에서 더 정확한 경향이 있다는 것입니다.
sklearn.ensemble에서 RandomForestClassifier 가져오기
모델 = RandomForestClassifier()
model.fit( X_train, y_train )
plot_mushroom_boundary( X_test, y_test, 모델 )
7. 다층 퍼셉트론
Multi-Layer Perceptron(또는 MLP)은 딥 러닝의 한 분야에 속하는 매우 매력적인 알고리즘입니다. 보다 구체적으로, 피드포워드 인공 신경망(ANN) 클래스에 속합니다. MLP는 입력 계층, 출력 계층 및 은닉 계층의 최소 3개 계층으로 다중 퍼셉트론의 네트워크를 형성합니다. MLP는 비선형적으로 분리 가능한 데이터를 구별할 수 있습니다.
은닉층의 각 뉴런은 활성화 함수를 사용하여 다음 층으로 진행합니다. 여기서 역전파 알고리즘은 실제로 매개변수를 조정하여 신경망을 훈련하는 데 사용됩니다. 주로 단순 회귀 문제에 사용할 수 있습니다.
sklearn.neural_network에서 MLPClassifier 가져오기
모델 = MLPClassifier()
model.fit( X_train, y_train )
plot_mushroom_boundary( X_test, y_test, 모델 )
더 읽어보기: Python 프로젝트 아이디어 및 주제
결론
서로 다른 기계 학습 알고리즘이 서로 다른 결정 경계를 생성하므로 동일한 데이터 세트를 분류할 때 정확도가 다르다는 결론을 내릴 수 있습니다.
일반적으로 모든 종류의 데이터에 대한 최고의 알고리즘으로 누구의 알고리즘도 선언할 수 있는 방법은 없습니다. 머신 러닝은 각 데이터 세트에 가장 적합한 것을 개별적으로 결정하기 위해 다양한 알고리즘에 대한 엄격한 시행착오를 필요로 합니다. ML 알고리즘 목록은 여기서 끝나지 않습니다. Python의 Scikit-Learn 라이브러리에는 탐색을 기다리고 있는 방대한 다른 기술이 있습니다. 이 모든 것을 사용하여 데이터 세트를 훈련하고 재미있게 보내십시오!
의사 결정 트리, 머신 러닝 에 대해 자세히 알아보려면 작업 전문가를 위해 설계되었으며 450시간 이상의 엄격한 교육, 30개 이상의 사례 연구 및 과제, IIIT-B 동문 자격, 5개 이상의 실질적인 실습 캡스톤 프로젝트 및 최고의 기업과의 취업 지원.
선형 회귀의 주요 가정은 무엇입니까?
선형 회귀에는 선형성, 등분산성, 독립성 및 정규성의 4가지 필수 가정이 있습니다. 선형성은 선형 회귀를 사용할 때 독립 변수(X)와 종속 변수의 평균(Y) 간의 관계가 선형으로 간주됨을 의미합니다. 등분산성은 그래프의 잔차 점의 오차 분산이 일정하다고 가정하는 것을 의미합니다. 독립성은 입력 데이터의 모든 관측치가 서로 독립적인 것으로 간주되는 것을 나타냅니다. 정규성이란 입력 데이터의 분포가 균일하거나 불균일할 수 있음을 의미하지만 선형회귀의 경우에는 균일하게 분포한다고 가정한다.
의사 결정 트리와 랜덤 포레스트의 차이점은 무엇입니까?
의사 결정 트리는 특정 작업에 대한 가능한 결과를 나타내는 트리와 같은 구조를 사용하여 의사 결정 프로세스를 구현합니다. 랜덤 포레스트는 이러한 의사 결정 트리 번들을 사용하여 데이터를 분석합니다. 이 과정에서 Random Forest는 더 많은 데이터를 사용하지만 과적합을 방지하고 정확한 결과를 제공합니다. 의사결정 트리 알고리즘에는 과적합의 범위가 있으며 덜 정확한 결과를 제공할 수 있습니다. 의사 결정 트리는 계산이 덜 필요하기 때문에 해석하기 쉬운 반면, 랜덤 포레스트는 복잡한 분석으로 인해 해석하기 어렵습니다.
Python에서 기계 학습 알고리즘에 사용되는 표준 라이브러리는 무엇입니까?
Python은 방대한 수의 라이브러리와 쉬운 구문 규칙으로 인해 기계 학습에서 거의 모든 다른 언어를 대체했습니다. Numpy, Scipy, Scikit-learn, Theono, TensorFlow, PyTorch, Matplotlib, Keras, Pandas 등과 같은 기계 학습을 위한 Python 라이브러리가 많이 있습니다. 이러한 라이브러리의 함수를 사용하면 각 작업에 대한 알고리즘을 작성하는 데 많은 시간을 절약할 수 있습니다. 프로세스는 시간이 덜 걸리고 효율적인 결과를 제공합니다. 이러한 라이브러리에는 행렬 처리, 최적화 문제, 데이터 마이닝, 통계 분석, 텐서를 포함하는 계산, 객체 감지, 신경망 등과 같은 응용 프로그램이 있습니다.