손실함수란 무엇인가요?
손실 함수는 모델이 데이터에 얼마나 잘 맞는지 측정하는 알고리즘입니다. 손실 함수는 실제 측정값과 예측값 간의 차이를 측정하는 방법입니다. 손실 함수의 값이 높을수록 예측이 부정확해지고, 손실 함수의 값이 낮을수록 예측이 실제 값에 가까워집니다. 손실 함수는 각 개별 관찰(데이터 포인트)에 대해 계산됩니다. 모든 손실 함수의 값을 평균하는 함수를 비용 함수라고 합니다. 더 쉽게 이해하면 손실 함수는 단일 샘플에 대한 것이고 비용 함수는 모든 샘플에 대한 것입니다.
손실 함수 및 측정항목
일부 손실 함수는 평가 측정항목으로도 사용할 수 있습니다. 그러나 손실 함수와 메트릭은 목적이 다릅니다. 측정항목은 최종 모델을 평가하고 다양한 모델의 성능을 비교하는 데 사용되는 반면, 손실 함수는 모델 구축 단계에서 생성되는 모델에 대한 최적화 도구로 사용됩니다. 손실 함수는 모델에 오류를 최소화하는 방법을 안내합니다.
즉, 손실 함수는 모델이 어떻게 훈련되었는지 알고, 측정 지수는 모델의 성능을 설명합니다.
손실 함수를 사용하는 이유
손실 함수는 예측 값과 실제 값의 차이를 측정하므로 모델을 훈련할 때(일반적인 경사하강법) 모델 개선을 안내하는 데 사용할 수 있습니다. 모델을 구축하는 과정에서 특성의 가중치가 변하여 예측이 좋아지거나 나빠지면 손실 함수를 사용하여 모델 내 특성의 가중치를 변경해야 하는지 여부와 변화 방향을 판단해야 합니다. .
우리가 해결하려는 문제의 유형, 데이터 품질 및 분포, 사용하는 알고리즘에 따라 기계 학습에서 다양한 손실 함수를 사용할 수 있습니다. 다음 그림은 우리가 컴파일한 10가지 일반적인 손실 함수를 보여줍니다. :
회귀 문제
1. 평균 제곱 오차(MSE)
평균 제곱 오차는 모든 예측값과 참값의 차이를 제곱하여 평균한 것을 말합니다. 회귀 문제에 자주 사용됩니다.
def MSE (y, y_predicted):sq_error = (y_predicted - y) ** 2sum_sq_error = np.sum(sq_error)mse = sum_sq_error/y.sizereturn mse
2. 평균절대오차(MAE)
는 예측값과 실제값의 절대차의 평균으로 계산됩니다. 이는 데이터에 이상값이 있는 경우 평균 제곱 오차보다 더 나은 측정값입니다.
def MAE (y, y_predicted):error = y_predicted - yabsolute_error = np.absolute(error)total_absolute_error = np.sum(absolute_error)mae = total_absolute_error/y.sizereturn mae
3. 평균 제곱근 오차(RMSE)
이 손실 함수는 평균 제곱 오차의 제곱근입니다. 더 큰 오류를 처벌하고 싶지 않은 경우 이는 이상적인 접근 방식입니다.
def RMSE (y, y_predicted):sq_error = (y_predicted - y) ** 2total_sq_error = np.sum(sq_error)mse = total_sq_error/y.sizermse = math.sqrt(mse)return rmse
4. 평균 편향 오차(MBE)
는 평균 절대 오차와 유사하지만 절대값을 구하지 않습니다. 이 손실 함수의 단점은 음수 오류와 양수 오류가 서로 상쇄될 수 있다는 점이므로 연구자가 오류가 한 방향으로만 진행된다는 것을 알고 있을 때 적용하는 것이 좋습니다.
def MBE (y, y_predicted):error = y_predicted - ytotal_error = np.sum(error)mbe = total_error/y.sizereturn mbe
5. Huber 손실
Huber 손실 함수는 평균 절대 오차(MAE)와 평균 제곱 오차(MSE)의 장점을 결합합니다. 이는 Hubber 손실이 두 가지 분기를 갖는 함수이기 때문입니다. 한 가지 분기는 예상 값과 일치하는 MAE에 적용되고 다른 분기는 이상값에 적용됩니다. Hubber Loss의 일반 기능은 다음과 같습니다.
여기
def hubber_loss (y, y_predicted, delta)delta = 1.35 * MAEy_size = y.sizetotal_error = 0for i in range (y_size):erro = np.absolute(y_predicted[i] - y[i])if error < delta:hubber_error = (error * error) / 2else:hubber_error = (delta * error) / (0.5 * (delta * delta))total_error += hubber_errortotal_hubber_error = total_error/y.sizereturn total_hubber_error
이진 분류
6. 최대 가능성 손실(Likelihood Loss/LHL)
이 손실 함수는 주로 이진 분류 문제에 사용됩니다. 각 예측 값의 확률을 곱하여 손실 값을 구하고, 관련 비용 함수는 관측된 모든 값의 평균입니다. 클래스가 [0] 또는 [1]인 이진 분류의 다음 예를 살펴보겠습니다. 출력 확률이 0.5보다 크거나 같으면 예측 클래스는 [1]이고, 그렇지 않으면 [0]입니다. 출력 확률의 예는 다음과 같습니다.
[0.3, 0.7, 0.8, 0.5, 0.6, 0.4]
해당 예측 클래스는 다음과 같습니다.
[0, 1, 1, 1, 1, 0]
실제 클래스는 다음과 같습니다.
[0, 1, 1, 0, 1, 0]
이제 실제 클래스와 출력 확률을 사용하여 손실을 계산합니다. 실제 클래스가 [1]이면 출력 확률을 사용하고, 실제 클래스가 [0]이면 1-확률을 사용합니다.
((1–0.3)+0.7+0.8+(1–0.5)+ 0.6+(1 –0.4)) / 6 = 0.65
파이썬 코드는 다음과 같습니다:
def LHL (y, y_predicted):likelihood_loss = (y * y_predicted) + ((1-y) * (y_predicted))total_likelihood_loss = np.sum(likelihood_loss)lhl = - total_likelihood_loss / y.sizereturn lhl
7.BCE(Binary Cross Entropy)
이 함수는 대수 우도 손실을 수정한 것입니다. 일련의 숫자를 쌓으면 신뢰도가 높지만 잘못된 예측에 불이익을 줄 수 있습니다. 이진 교차 엔트로피 손실 함수의 일반 공식은 다음과 같습니다.
— (y . log (p) + (1 — y) . log (1 — p))
계속해서 다음 값을 사용해 보겠습니다. 위의 예:
출력 확률 = [0.3, 0.7, 0.8, 0.5, 0.6, 0.4]
실제 클래스 = [0, 1, 1, 0, 1, 0]
— (0 . log (0.3) + (1–0) .로그(1–0.3)) = 0.155
— (1 . log(0.7) + (1–1) . log (0.3)) = 0.155
— (1 . log(0.8) + (1–1) . log (0.2)) = 0.097
— (0 . log (0.5) + (1–0) . log (1–0.5)) = 0.301
— (1 . log(0.6) + (1–1) . log (0.4)) = 0.222
— (0 . log (0.4) + (1–0) . log (1–0.4)) = 0.222
那么代价函数的结果为:
(0.155 + 0.155 + 0.097 + 0.301 + 0.222 + 0.222) / 6 = 0.192
Python的代码如下:
def BCE (y, y_predicted):ce_loss = y*(np.log(y_predicted))+(1-y)*(np.log(1-y_predicted))total_ce = np.sum(ce_loss)bce = - total_ce/y.sizereturn bce
8、Hinge Loss 和 Squared Hinge Loss (HL and SHL)
Hinge Loss被翻译成铰链损失或者合页损失,这里还是以英文为准。
Hinge Loss主要用于支持向量机模型的评估。错误的预测和不太自信的正确预测都会受到惩罚。 所以一般损失函数是:
l(y) = max (0 , 1 — t . y)
这里的t是真实结果用[1]或[-1]表示。
使用Hinge Loss的类应该是[1]或[-1](不是[0])。为了在Hinge loss函数中不被惩罚,一个观测不仅需要正确分类而且到超平面的距离应该大于margin(一个自信的正确预测)。如果我们想进一步惩罚更高的误差,我们可以用与MSE类似的方法平方Hinge损失,也就是Squared Hinge Loss。
如果你对SVM比较熟悉,应该还记得在SVM中,超平面的边缘(margin)越高,则某一预测就越有信心。如果这块不熟悉,则看看这个可视化的例子:
如果一个预测的结果是1.5,并且真正的类是[1],损失将是0(零),因为模型是高度自信的。
loss= Max (0,1 - 1* 1.5) = Max (0, -0.5) = 0
如果一个观测结果为0(0),则表示该观测处于边界(超平面),真实的类为[-1]。损失为1,模型既不正确也不错误,可信度很低。
loss = max (0 , 1–(-1) * 0) = max (0 , 1) = 1
如果一次观测结果为2,但分类错误(乘以[-1]),则距离为-2。损失是3(非常高),因为我们的模型对错误的决策非常有信心(这个是绝不能容忍的)。
loss = max (0 , 1 — (-1) . 2) = max (0 , 1+2) = max (0 , 3) = 3
python代码如下:
#Hinge Lossdef Hinge (y, y_predicted):hinge_loss = np.sum(max(0 , 1 - (y_predicted * y)))return hinge_loss#Squared Hinge Lossdef SqHinge (y, y_predicted):sq_hinge_loss = max (0 , 1 - (y_predicted * y)) ** 2total_sq_hinge_loss = np.sum(sq_hinge_loss)return total_sq_hinge_loss
多分类
9、交叉熵(CE)
在多分类中,我们使用与二元交叉熵类似的公式,但有一个额外的步骤。首先需要计算每一对[y, y_predicted]的损失,一般公式为:
如果我们有三个类,其中单个[y, y_predicted]对的输出是:
这里实际的类3(也就是值=1的部分),我们的模型对真正的类是3的信任度是0.7。计算这损失如下:
Loss = 0 . log (0.1) + 0 . log (0.2) + 1 . log (0.7) = -0.155
为了得到代价函数的值,我们需要计算所有单个配对的损失,然后将它们相加最后乘以[-1/样本数量]。代价函数由下式给出:
使用上面的例子,如果我们的第二对:
Loss = 0 . log (0.4) + 1. log (0.4) + 0. log (0.2) = -0.40
那么成本函数计算如下:
使用Python的代码示例可以更容易理解:
def CCE (y, y_predicted):cce_class = y * (np.log(y_predicted))sum_totalpair_cce = np.sum(cce_class)cce = - sum_totalpair_cce / y.sizereturn cce
10、Kullback-Leibler 散度 (KLD)
又被简化称为KL散度,它类似于分类交叉熵,但考虑了观测值发生的概率。 如果我们的类不平衡,它特别有用。
def KL (y, y_predicted):kl = y * (np.log(y / y_predicted))total_kl = np.sum(kl)return total_kl
以上就是常见的10个损失函数,希望对你有所帮助。
위 내용은 일반적으로 사용되는 10가지 손실 함수 설명 및 Python 코드 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Python은 데이터 과학, 웹 개발 및 자동화 작업에 적합한 반면 C는 시스템 프로그래밍, 게임 개발 및 임베디드 시스템에 적합합니다. Python은 단순성과 강력한 생태계로 유명하며 C는 고성능 및 기본 제어 기능으로 유명합니다.

2 시간 이내에 Python의 기본 프로그래밍 개념과 기술을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우기, 2. 마스터 제어 흐름 (조건부 명세서 및 루프), 3. 기능의 정의 및 사용을 이해하십시오. 4. 간단한 예제 및 코드 스 니펫을 통해 Python 프로그래밍을 신속하게 시작하십시오.

Python은 웹 개발, 데이터 과학, 기계 학습, 자동화 및 스크립팅 분야에서 널리 사용됩니다. 1) 웹 개발에서 Django 및 Flask 프레임 워크는 개발 프로세스를 단순화합니다. 2) 데이터 과학 및 기계 학습 분야에서 Numpy, Pandas, Scikit-Learn 및 Tensorflow 라이브러리는 강력한 지원을 제공합니다. 3) 자동화 및 스크립팅 측면에서 Python은 자동화 된 테스트 및 시스템 관리와 같은 작업에 적합합니다.

2 시간 이내에 파이썬의 기본 사항을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우십시오. 이를 통해 간단한 파이썬 프로그램 작성을 시작하는 데 도움이됩니다.

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

Python 3.6에 피클 파일로드 3.6 환경 보고서 오류 : modulenotfounderror : nomodulename ...

경치 좋은 스팟 댓글 분석에서 Jieba Word 세분화 문제를 해결하는 방법은 무엇입니까? 경치가 좋은 스팟 댓글 및 분석을 수행 할 때 종종 Jieba Word 세분화 도구를 사용하여 텍스트를 처리합니다 ...


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.
