python - 최소 차 제곱합을 찾는 알고리즘

기사 출처 python algorithm

기본적으로 내가 작성하는이 알고리즘은 List L을 입력으로 취하고 L, i, minus x squared 및 summed의 모든 항목이 최소화되도록 숫자 x를 찾고 싶습니다. abs(L[i]-x)**2의 합에 대한 최소 x를 찾으십시오. 지금까지 내 알고리즘은 플로팅의 경우가 아니라 예상대로 작동합니다. 플로팅을 구현하는 방법을 잘 모르겠습니다. 예를 들어 [2, 2, 3, 4]는 이상적으로 결과 2.75를 산출하지만 내 알고리즘은 현재 부동 정수를 산출 할 수 없습니다.

 def minimize_square(L):
     sumsqdiff = 0
     sumsqdiffs = {}
     for j in range(min(L), max(L)):
             for i in range(len(L)-1):
                     sumsqdiff += abs(L[i]-j)**2
             sumsqdiffs[j]=sumsqdiff
             sumsqdiff = 0
     return min(sumsqdiffs, key=sumsqdiffs.get)
차이 제곱의 합을 최소화하는 숫자가 L의 산술 mean라는 것을 [*] 증명하기 쉽습니다. 이것은 다음과 같은 간단한 솔루션을 제공합니다.

In [26]: L = [2, 2, 3, 4]

In [27]: sum(L) / float(len(L))
Out[27]: 2.75


또는 NumPy 사용 :

In [28]: numpy.mean(L)
Out[28]: 2.75


[*] 다음은 증명의 개요입니다.

합계가 x를 차지하는 f(x) = sum((x - L[i])**2)를 최소화하는 i=0..n-1를 찾아야합니다.

f(x)set it to zero의 미분을 취하십시오.

2*sum(x - L[i]) = 0


간단한 대수를 사용하여 위의 내용을 다음과 같이 변환 할 수 있습니다.

x = sum(L[i]) / n


다름 아닌 L의 산술 평균입니다. QED.

이 질문에 대해 Stack Overflow에서 비슷한 토론을 찾았습니다: https://stackoverflow.com/questions/13727222/

관련 기사
python - Python에서 베어 함수 객체가 유효한 코드 인 이유는 무엇입니까? [닫은]
python - 예외에서 루프를 종료하지만 모든 예외 유형을 다시 발생시키지 않는 방법은 무엇입니까?
python - 특수 문자를 고려하지 않고 대소 문자를 구분하지 않고 문자열 목록을 정렬하는 방법
python - numpy.nextafter () float에 추가하면 예기치 않은 결과가 반환됩니다.
python - 한 번에 여러 파일 쓰기
python - Simplegui 가져 오기 문제
python - 파이썬의 백 슬래시 이스케이프 문자 이해
python - 지정된 바이트 오프셋에서 파일에서 행 가져 오기
python - REST API의 일반 (HTML이 아닌) 오류 페이지
python - 비 루트 사용자로서의 감독자 [닫힘]