Python 기계 학습 의 Kmeans 기초 알고리즘
k-maeans 알고리즘 은 일종 의 집합 알고리즘 이다.이른바 집합 이란 유사 성 원칙 에 따라 비교적 높 은 싱크로 율 을 가 진 데이터 대상 을 같은 클래스 로 나 누고 비교적 높 은 싱크로 율 을 가 진 데이터 대상 을 다른 클래스 로 나 누 는 것 이다.집합 과 분류의 가장 큰 차이 점 은 집합 과정 은 감독 과정 이 없다 는 것 이다.즉,처리 해 야 할 데이터 대상 은 선험 지식 이 없고 분류 과정 은 감독 과정,즉 선험 지식 이 있 는 훈련 데이터 세트 가 존재 한 다 는 것 이다.
2.알고리즘 과정
K-means 중심 사상:상수 K 를 미리 확정 하고 상수 K 는 최종 집합(또는 클 러 스 터 라 고 함)유형 수 를 의미한다.먼저 초기 점 을 질량 심 으로 무 작위 로 선정 하고 모든 견본 과 질량 심 간 의 싱크로 율(여 기 는 유럽식 거리)을 계산 하여 견본 점 을 가장 비슷 한 유형 으로 분류 한 다음 에 각 유형의 질량 심(즉,유형 중심)을 다시 계산 하여 이런 과정 을 반복 한다.질량 심 이 더 이상 변 하지 않 을 때 까지 최종 적 으로 모든 견본 이 속 한 유형 과 각 유형의 질량 심 을 확정 했다.매번 모든 견본 과 각 질량 심 간 의 싱크로 율 을 계산 해 야 하기 때문에 대규모 데이터 세트 에서 K-Means 알고리즘 은 수렴 속도 가 비교적 느리다.
1.분류 알고리즘:
전형 적 인 무 감독 학습 알고리즘 으로 비슷 한 견본 을 하나의 유형 에 자동 으로 분류 하 는 데 사용 된다.
분류 알고리즘 과 분류 알고리즘 의 가장 큰 차이 점 은 분류 알고리즘 은 감독 이 없 는 학습 알고리즘 이 고 분류 알고리즘 은 감독의 학습 에 속한다.
알고리즘,분 류 는 결 과 를 안다.
집합 알고리즘 에서 견본 간 의 유사 성에 따라 견본 을 서로 다른 유형 으로 나 누고 서로 다른 싱크로 율 계산 방법 에 대해 서로 다른 집합 결 과 를 얻 을 수 있 으 며 자주 사용 하 는 싱크로 율 계산 방법 은 유럽식 거리 법 이 있다.
2.분류:
물리 적 또는 추상 적 대상 의 집합 은 유사 한 대상 으로 구 성 된 여러 가지 유형 으로 나 뉘 는 과정 을 집합 이 라 고 한다.집합 에서 생 성 된 클 러 스 터 는 데이터 대상 의 집합 으로 이 대상 들 은 같은 클 러 스 터 의 대상 과 서로 비슷 하 며 다른 클 러 스 터 의 대상 과 다르다.
3.묶음:
이 알고리즘 은 데이터 집합 류 를 k 류,즉 k 개의 클 러 스 터 로 이해 할 수 있 습 니 다.
4.질량 중심:
각 유형의 중심 위치,즉 떨 기 중심 을 가리킨다.
5.거리 공식:
자주 사용 되 는 것 은 유클리드 거리(오 씨 거리),맨 해 튼 거리,민 코 프 스키 거리 등 이 있다.
3.문자 절차
1.처리 할 데이터 세트 지정
2.클 러 스 터 의 개수 k(kmeans 알고리즘 이 초 매개 변 수 를 전달 할 때 최대 K 값 만 설정 합 니 다)
3.K 개의 클 러 스 터 를 임의로 생 성하 고 K 개의 클 러 스 터 를 생 성 하 는 중심 은 각각 c 1,c 2,...,c k c1,c2,...,ck c1,c2,...,ck 이다.각 묶음 의 견본 수량 은 N 1,N 2,..,N 3 N1,N2,...,N3 N1,N2,...,N3 이다.
4.유클리드 거리 공식 을 통 해 각 점 에서 각 질량 심 까지 의 거 리 를 계산 하고 각 점 을 가장 가 까 운 질량 심 에 나 누 어 데이터 집합 을 K 류 점 으로 초보 적 으로 나눈다.
5.질 심 업데이트:아래 의 공식 을 통 해 모든 질 심 을 업데이트 합 니 다.즉,새로운 질량 심 의 수 치 는 현재 이 질량 심 이 속 한 모든 점 의 평균 값 과 같다.c j = 1 N j ∑ i = 1 N j x i , y i c_{j}=\frac{1}{N_{j}}\sum_{i=1}^{N{j}}x_{i},y_{i} cj=Nj1i=1∑Njxi,yi
6.수렴 요 구 를 충족 시 킬 때 까지 상기 절 차 를 반복 한다.(보통 확실한 중심 점 은 변 하지 않 는 다.)
도형 전시
상술 한 절차 에 따라 우 리 는 분류 과정 을 더욱 잘 이해 할 수 있다.
5.코드 구현
x ],[ y ]]
for i in range(m):
if i < m/3:
data[0].append(uniform(1,5))#
data[1].append(uniform(1,5))
elif i < 2*m/3:
data[0].append(uniform(6,10))
data[1].append(uniform(1,5))
else:
data[0].append(uniform(3,8))
data[1].append(uniform(5,10))
#
plt.scatter(data[0],data[1])
plt.xlim(0,11)
plt.ylim(0,11)
plt.show()
#
def distEuclid(x1,y1,x2,y2):
d = sqrt((x1-x2)**2+(y1-y2)**2)
return d
cent0 = [uniform(2,9),uniform(2,9)] # K=3 ,
cent1 = [uniform(2,9),uniform(2,9)] #[x,y]
cent2 = [uniform(2,9),uniform(2,9)]
mark = [] #
dist = [[],[],[]]#
#
for n in range(50):
#
for i in range(m):
dist[0].append(distEuclid(cent0[0],cent0[1],data[0][i],data[1][i]))
dist[1].append(distEuclid(cent1[0],cent1[1],data[0][i],data[1][i]))
dist[2].append(distEuclid(cent2[0],cent2[1],data[0][i],data[1][i]))
#
sum0_x = sum0_y = sum1_x = sum1_y = sum2_x = sum2_y = 0
number0 = number1 = number2 = 0
for i in range(m):
if dist[0][i]<dist[1][i] and dist[0][i]<dist[2][i]:
mark.append(0)
sum0_x += data[0][i]
sum0_y += data[1][i]
number0 += 1
elif dist[1][i]<dist[0][i] and dist[1][i]<dist[2][i]:
mark.append(1)
sum1_x += data[0][i]
sum1_y += data[1][i]
number1 += 1
elif dist[2][i]<dist[0][i] and dist[2][i]<dist[1][i]:
mark.append(2)
sum2_x += data[0][i]
sum2_y += data[1][i]
number2 += 1
#
cent0 = [sum0_x/number0,sum0_y/number0]
cent1 = [sum1_x/number1,sum1_y/number1]
cent2 = [sum2_x/number2,sum2_y/number2]
#
for i in range(m):
if mark[i] == 0:
plt.scatter(data[0][i],data[1][i],color='red')
if mark[i] == 1:
plt.scatter(data[0][i],data[1][i],color='blue')
if mark[i] == 2:
plt.scatter(data[0][i],data[1][i],color='green')
plt.scatter(cent0[0],cent0[1],marker='*',color='red')
plt.scatter(cent1[0],cent1[1],marker='*',color='blue')
plt.scatter(cent2[0],cent2[1],marker='*',color='green')
plt.xlim(0,11)
plt.ylim(0,11)
plt.show()
상기 코드 데이터 선택 은 무 작위 로 생 성 된 것 으로 매번 실행 결과 가 다 르 기 때문에 테스트 를 통 해 분류 가 이상 적 이지 않 은 효 과 를 발견 할 수 있 습 니 다.기초 알고리즘 에 큰 폐단 이 존재 한 다 는 것 을 설명 하기 위해 우 리 는 개선 이 필요 하 다.본 편의 내용 을 바탕 으로 지식 을 개선 하 는 설명 을 하지 않 는 다.몇 가지 비교적 좋 은 분류
몇 가지 비교적 나 쁜 분류
소결
장점.
알고리즘 이 간단 하고 실현 하기 쉽다.
클 러 스 터 효 과 는 K 값 선택 에 의존 합 니 다.
결점.
사용자 가 미리 클래스 갯 수 를 지정 해 야 합 니 다.
집합 결 과 는 초기 클 러 스 터 센터 의 선택 에 비교적 민감 하 다.
국부 최 우수 에 빠 지기 쉽다.구형 클 러 스 터 만 발견 할 수 있 습 니 다.
파 이 썬 머 신 러 닝 의 KMeans 기초 알고리즘 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.파 이 썬 KMeans 기초 알고리즘 에 관 한 더 많은 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.