차례:
- 실제 문제에 대해 신경망을 사용하는 경우 다른 알고리즘보다 훨씬 더 엄격한 방법으로주의를 기울여야합니다. 신경 회로망은 다른 기계 학습 솔루션보다 더 취약하며 오류가 발생하기 쉽습니다.
- 신경망을 만드는 방법을 배우는 가장 좋은 방법은 신경망을 만드는 것입니다. Python은 신경망 및 심층 학습을위한 풍부한 구현을 제공합니다. 파이썬에는 추상적 인 수준에서 복잡한 계산을 할 수있는 Theano와 같은 라이브러리가 있으며, 신경망을 만들 수있는 Lasagne와 같은 실용적인 패키지가 있지만 아직까지는 추상화가 필요합니다. 이러한 이유 때문에 noelarn과 같은 래퍼 (scikit-learn과 호환 가능) 또는 Keras가 필요합니다. Keras는 신경 계산을위한 소프트웨어 라이브러리로 Theano를 대체 할 가능성이있는 Google이 출시 한 TensorFlow 라이브러리를 래핑 할 수도 있습니다.
비디오: [머신러닝] 오버피팅 (overfitting) 2024
신경망 구조가 주어지면 알고리즘이 데이터에서 거의 모든 것을 학습 할 수 있다고 상상할 수 있습니다. 사실, 알고리즘은 너무 잘하여 그 예측은 종종 overfitting 라고하는 높은 추정 분산의 영향을받습니다. 초과 구현은 신경망이 학습 예제의 모든 세부 사항을 학습하게하여 예측 단계에서이를 복제 할 수있게합니다. 그러나 훈련 세트를 제외하고는 다른 것을 예측하지 않습니다.
실제 문제에 대해 신경망을 사용하는 경우 다른 알고리즘보다 훨씬 더 엄격한 방법으로주의를 기울여야합니다. 신경 회로망은 다른 기계 학습 솔루션보다 더 취약하며 오류가 발생하기 쉽습니다.
먼저, 교육, 검증 및 테스트 세트로 데이터를 신중하게 분리합니다. 알고리즘이 데이터에서 학습하기 전에 매개 변수의 장점을 평가해야합니다. 아키텍처 (아키텍처 및 계층에있는 노드 수). 활성화 함수; 학습 파라미터; 및 반복 수. 특히, 아키텍처는 과핑 (overfitting) 위험이 높은 강력한 예측 모델을 생성 할 수있는 좋은 기회를 제공합니다. 학습 매개 변수는 네트워크가 데이터로부터 얼마나 빨리 학습 하는지를 제어하지만, 학습 데이터의 과적 함을 방지하는 데 충분하지 않을 수 있습니다.
->
이 문제에 대한 두 가지 가능한 해결책이 있습니다.선형 및 로지스틱 회귀 분석에서와 마찬가지로 첫 번째 해법은
- 정규화 입니다. 제곱 또는 절대 값의 모든 연결 계수를 합하여 높은 값 (L2 정규화에 의해 달성)이 너무 많은 계수 또는 0과 다른 값 (L1 정규화에 의해 달성 됨)이있는 모델에 불이익을 줄 수 있습니다. 두 번째 해결책은 과핑이 발생할 때 제어하기 때문에 효과적입니다.
- early-stop 라고하며 알고리즘이 학습 세트에서 학습 할 때 유효성 확인 세트의 비용 함수를 확인하여 작동합니다.
신경망 블랙 박스 열기
신경망을 만드는 방법을 배우는 가장 좋은 방법은 신경망을 만드는 것입니다. Python은 신경망 및 심층 학습을위한 풍부한 구현을 제공합니다. 파이썬에는 추상적 인 수준에서 복잡한 계산을 할 수있는 Theano와 같은 라이브러리가 있으며, 신경망을 만들 수있는 Lasagne와 같은 실용적인 패키지가 있지만 아직까지는 추상화가 필요합니다. 이러한 이유 때문에 noelarn과 같은 래퍼 (scikit-learn과 호환 가능) 또는 Keras가 필요합니다. Keras는 신경 계산을위한 소프트웨어 라이브러리로 Theano를 대체 할 가능성이있는 Google이 출시 한 TensorFlow 라이브러리를 래핑 할 수도 있습니다.
R은 nnet, AMORE 및 neuralnet과 같이 덜 복잡하고 접근하기 쉬운 라이브러리를 제공합니다. R의 간단한 예제는 분류 네트워크 (아이리스 데이터 세트)와 회귀 네트워크 (보스턴 데이터 세트)를 모두 교육하는 방법을 보여줍니다. 분류에서 시작하여 다음 코드는 데이터 세트를로드하고이를 학습 및 테스트 세트로 분할합니다.
라이브러리 (신경망)
대상 <- 모델. 매트릭스 (~ 종 & # x00A0; - 1, 데이터 = 아이리스)
colnames (목표) <- c ("setosa", "versicolor", "virginica")
인덱스 1: 4]
test_predictors <- 아이리스 [-index, 1: 4]
인덱스 <- 샘플 (1: nrow (홍채), 100)
train_predictors <
신경망은 기울기 강하에 의존하기 때문에 입력을 표준화하거나 표준화해야합니다. 표준화가 더 좋으므로 최소값은 0이고 최대 값은 모든 피쳐에 대해 1입니다. 당연히, 샘플 밖의 테스트에서 정보를 사용할 기회를 피하기 위해서만 교육 세트를 사용하여 숫자 변환을 수행하는 방법을 배우게됩니다.
min_vector <- 적용 (train_predictors, 2, min)
range_vector <- apply (train_predictors, 2, max) -
적용 (train_predictors, 2, min)
train_scaled <- cbind test_scaled <--cbind (scale (test_predictors,
min_vector, range_vector),
target [-index,])
min_vector, range_vector) summary (train_scaled)
트레이닝 세트가 준비되면 모델을 학습하여 세 가지 이진 변수를 추측 할 수 있습니다. 각 변수는 하나의 클래스를 나타냅니다. 출력은 실제 클래스가 될 확률에 비례하여 각 클래스의 값입니다. 가장 높은 값을 취하여 예측을 선택합니다. 또한 내부 플롯을 사용하여 네트워크를 시각화 할 수 있으므로 신경망 아키텍처와 할당 된 가중치를 볼 수 있습니다.
세트. 씨앗 (102) 999 nn_iris <- neuralnet (setosa + versicolor + virginica ~ 999 세 길이와 세펄 너비
+ 꽃잎 길이 + 꽃잎 너비, 999 data = train_scaled, hidden = c (nn_iris, test_scaled [1: 4])
y_predicted <- 적용 (예측 $ net. 결과, 1, 최대)
y_true <- 적용 (test_scaled [5: 7], 1, 최대)
confusion_matrix <- table (y_true, y_predicted)
print (confusion_matrix)
print (confusion_matrix) /
합계 (confusion_matrix)
인쇄 (confusion_matrix)
인쇄 (붙여 넣기 ("정확도:", 정확도))
다음 예제는 보스턴 데이터 세트를 사용하여 보스턴의 집값을 예측하는 방법을 보여줍니다. 절차는 이전 분류와 동일하지만 여기서 단일 출력 단위가 있습니다. 또한이 코드는 테스트 세트의 예측 결과를 실제 값과 비교하여 모델 적합성을 검증합니다.
no_examples <- nrow (Boston)
기능은
기능을 설정합니다. index = - sample (1: no_examples, 400)
train <- 보스턴 [인덱스,]
테스트 <- boston [-index,]
min_vector <- 적용 (train (train, 2, max) - 적용 (train, 2, min)
scaled_train <- scale (train, min_vector, range_vector)
수식 = 붙여 넣기 ("medv ~", 붙여 넣기 (기능 [1: 13],
축소 = & apos; +) (nn_boston, scaled_test [1: 13])
predict_values <- (예측 $ net). 결과 (9) range_vector [14]) + min_vector [14] 999 RMSE <- sqrt (평균 ((test [14] - 예측 된 값) ^ 2)) 999 print (paste ("RMSE:", (0, 1, lwd = 1)