기계 학습 - 신경망 Python 구현

신경망의 기본 개념

1. 신경망은 입력층, 은닉층, 출력층으로 구성됩니다.

2. 레이어 사이에는 뉴런 사이의 연결이 있지만 레이어 내의 뉴런 사이에는 연결이 없습니다. 연결된 뉴런은 해당 가중치를 갖습니다.

3. 가장 왼쪽 레이어를 입력 레이어라고 하며 입력 데이터 수신을 담당합니다.

4. 가장 오른쪽 레이어를 출력 레이어라고 하며, 이 레이어에서 신경망 출력 데이터를 얻을 수 있습니다.

5. 입력 레이어와 출력 레이어 사이의 레이어를 은닉 레이어라고 합니다.

6. 인접한 두 층에 있는 서로 다른 뉴런 사이의 연결 강도를 가중치라고 합니다. 뉴런 1부터 뉴런 2까지의 값이 더 크다면 뉴런 1이 뉴런 2에 더 큰 영향을 미친다는 의미입니다. 가중치는 입력 값의 중요성을 감소시킵니다. 가중치가 0에 가까우면 입력의 변화는 출력의 변화에 ​​영향을 미치지 않습니다. 음의 가중치는 입력이 증가함에 따라 출력이 감소한다는 것을 의미합니다. 가중치는 입력이 출력에 미치는 영향을 결정합니다.

여기에 이미지 설명을 삽입하세요.

위 그림의 네트워크는 3개의 뉴런 레이어로 구성되어 있지만 실제로는 2개의 레이어만 있고 총 20개의 가중치가 있으므로 일반적으로 입력 레이어를 0번째 레이어 네트워크로 간주합니다. 2-레이어 네트워크(입력 레이어에 따라, 히든 레이어와 출력 레이어의 총 개수에서 1을 빼서 네트워크 이름이 지정됨).

신경망 훈련 방법

신경망의 훈련 방법은 로지스틱 회귀의 훈련 방법과 매우 유사합니다.

여기에 이미지 설명을 삽입하세요.

모델의 매개변수를 업데이트할 때도 경사하강법 알고리즘을 사용하는데, 경사하강법을 사용하려면 매개변수에 대한 손실함수의 기울기를 알아야 합니다. 신경망에서는 다층 네트워크로 인해 네트워크를 훈련하기가 매우 어렵고, 너무 많은 매개변수의 기울기를 찾는 것이 매우 번거롭습니다. 역전파 알고리즘의 출현으로 이 문제가 해결되었으며 이러한 기울기를 빠르게 계산할 수 있습니다. 역전파 알고리즘은 순전파와 역전파의 두 부분으로 나뉩니다.

1. 순방향 전파

여기에 이미지 설명을 삽입하세요.여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

여기에 이미지 설명을 삽입하세요.

2. 역전파

순전파(forward propagation)를 통해 손실 함수를 찾을 수 있으며, 역전파(back propagation)는 순전파(forward propagation)를 통해 얻은 손실 함수를 이용하여 매개변수의 기울기, 즉 각 매개변수의 편도함수를 구합니다.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

데이터 소개

아이리스 데이터세트

여기에 이미지 설명을 삽입하세요.

붓꽃 데이터 세트는 다변량 분석을 위한 데이터 세트 유형입니다. 꽃받침 길이, 꽃받침 너비, 꽃잎 길이, 꽃잎 너비의 네 가지 속성을 사용하여 붓꽃이 속하는 세 가지 범주(Setosa, Versicolour, Virginica) 중 어느 것인지 예측합니다. Iris 데이터 세트는 sklearn 라이브러리의 표준 데이터 세트에서 찾아 참조할 수 있지만 이미 EduCoder 교육 플랫폼에서 제공됩니다. 일부 데이터와 라벨은 다음과 같습니다.

여기에 이미지 설명을 삽입하세요.

여기에 이미지 설명을 삽입하세요.

파이썬 코드 구현

여기서는 sklearn 라이브러리 모델이 훈련 및 예측에 사용됩니다.

#encoding=utf8
import os
import pandas as pd
from sklearn.neural_network import MLPClassifier

if os.path.exists('./step2/result.csv'):
    os.remove('./step2/result.csv')
    
#获取训练数据
train_data = pd.read_csv('./step2/train_data.csv')
#获取训练标签
train_label = pd.read_csv('./step2/train_label.csv')
train_label = train_label['target']
#获取测试数据
test_data = pd.read_csv('./step2/test_data.csv')

#调用MLP模型并进行训练
mlp = MLPClassifier(solver='lbfgs',max_iter =500,
           alpha=1e-3,hidden_layer_sizes=(100,),learning_rate_init=0.0001)
mlp.fit(train_data, train_label)

#预测
result = mlp.predict(test_data)
#保存
save_df = pd.DataFrame({
    
    'result':result})
save_df.to_csv('./step2/result.csv',index=0)

신경망 모델은 sklearn 라이브러리에 통합되어 있으며 신경망 모델은 from sklearn.neural_network import MLPClassifier를 사용하여 로드할 수 있습니다.

MLPClassifier的构造函数有几个比较常用的参数:

solver:MLP的求解方法lbfs在小数据上表现较好,adam较为鲁棒,sgd在参数调整较优时会有最佳表现(分类效果与迭代次数),sgd 随机梯度下降;

max_iter:最大训练轮数;

alpha:正则项系数,默认为L2正则化,需要具体调整;

hidden_layer_sizes:隐藏层层数以及包含的神经元数,是一个元组,例如(100,70,70)代表为神经网络设置三个隐藏层,每层的神经元数量分别是100、70、70。

learning_rate_init:学习率。(学习率通常需要设置,平台的教程中没有出现这个,但如果不设置,最终预测的准确率通常会比较低)

그리고 모델의 훈련 함수인 fit과 예측 함수가 있는데 사용법은 기본적으로 이전 모델과 동일하므로 여기서는 자세히 설명하지 않겠습니다.

코드가 작성된 후 플랫폼에서 테스트되었으며 최종 정확도는 0.95를 초과했습니다(이 결과는 최적의 결과가 아니며 플랫폼 표시기에는 0.95만 필요함).
여기에 이미지 설명을 삽입하세요.

이 기사에서는 Zhou Zhihua의 기계 학습, Beijing Institute of Technology의 Python 기계 학습 응용 과정 등 및 테스트 플랫폼 EduCoder 교육 플랫폼을 언급합니다.

추천

출처blog.csdn.net/qq_44725872/article/details/108835914