import matplotlib.pyplot as plt
def draw_fruits(arr, ratio=1):
n = len(arr) # n은 샘플 개수입니다
# 한 줄에 10개씩 이미지를 그립니다. 샘플 개수를 10으로 나누어 전체 행 개수를 계산합니다.
rows = int(np.ceil(n/10))
# 행이 1개 이면 열 개수는 샘플 개수입니다. 그렇지 않으면 10개입니다.
cols = n if rows < 2 else 10
fig, axs = plt.subplots(rows, cols,
figsize=(cols*ratio, rows*ratio), squeeze=False)
for i in range(rows):
for j in range(cols):
if i*10 + j < n: # n 개까지만 그립니다.
axs[i, j].imshow(arr[i*10 + j], cmap='gray_r')
axs[i, j].axis('off')
plt.show()
draw_fruits(pca.components_.reshape(-1, 100, 100))
- 여러개의 선형 방정식의 출력값을 0~1사이로 압축, 전체 합이 1이 되도록 만든다. 이를 위해 지수 함수를 사용하기 때문에 정규화된 지수 함수라고도 함
* 확률적 경사 : Stochastic Gradient Descent
: 하강법 : 훈련 세트에서 랜덤하게 하나의 샘플을 선택하여 손실 함수의 경사를 따라 최적의 모델을 찾는 알고리즘
: 에포크 : epoch : 확률적 경사 하강법에서 훈련세트를 한번 모두 사용하는 과정
* 미니배치 경사 : minibatch gradient descent
: 하강법 : 1개가 아닌 여러 개의 샘플을 사용해 경사 하강법을 수행하는 방법으로 실전에서 많이 사용
* 배치 경사 하강법 : batch gradient descent
- 한번에 전체 샘플을 사용하는 방법으로 전체 데이터를 사용하므로 가장 안정적인 방법이지만 그만큼 컴퓨터 자원을 많이 사용. data가 너무 많아 한번에 처리되지 않을 수 도 있음
* 손실함수 : loss function
- 어떤 문제에서 머신러닝 알고리즘이 얼마나 엉터리인지 측정하는 기준
* 로지스틱 손실함수 : logistic loss function
- 양성 클래스(target=1)일 때 손실은 -log(예측 확률)로 계산하며, 1 확률이 1에서 멀어질수록 손실은 아주 큰 양수가 됨. 음성 클래스(target=0)일 때 손실은 -log(예측 확률)로 계산. 이 예측 확률이 0에서 멀어질수록 손실은 아주 큰 양수가 됨
*크로스엔트로피 손실함수 : cross-entropy loss function
: 손실함수 : 다중 분류에서 사용하는 손실 함수
* 힌지 손실 : hinge loss
: support vector machine이라 불리는 머신러닝 알고리즘을 위한 손실 함수로 널리 사용하는 알고리즘 중 하나. SGDClassifier가 여러종류의 손실 함수를 loss 매개변수에 지정하여 다양한 머신러닝 앝고리즘을 지원함.
inertia = []
for k in range(2, 7):
km = KMeans(n_clusters=k, random_state=42)
km.fit(fruits_2d)
inertia.append(km.inertia_)
plt.plot(range(2, 7), inertia)
plt.xlabel('k')
plt.ylabel('inertia')
plt.show()
k-평균(k-means): 처음에 랜덤하게 클러스터 중심을 정하고 클러스트를 만든다. 클러스터 중심을 이동하고 다시 클러스트 만들기를 반복하여 최적의 클러스터 구성하는 알고리즘
클러스터 중심(cluster center, centroid): k-평균 알고리즘이 만든 클러스터에 속한 샘플의 특성 평균 값. 가장 가까운 클러스터 중심을 샘플의 또 다른 특성으로 사용하거나 새로운 샘플에 대한 예측으로 활용 가능
엘보우 방법(elbow): 최적의 클러스터 개수를 정하는 방법 중 하나. 이너셔(inertia)는클러스터 중심과 샘플 사이 거리의 제곱 합. 클러스터 개수에 따라 이너셔 감소가 꺽이는 지점이 적절한 클러스터 개수 k가 될 수 있음
import matplotlib.pyplot as plt
def draw_fruits(arr, ratio=1):
n = len(arr) # n은 샘플 개수입니다
# 한 줄에 10개씩 이미지를 그립니다. 샘플 개수를 10으로 나누어 전체 행 개수를 계산합니다.
rows = int(np.ceil(n/10))
# 행이 1개 이면 열 개수는 샘플 개수입니다. 그렇지 않으면 10개입니다.
cols = n if rows < 2 else 10
fig, axs = plt.subplots(rows, cols,
figsize=(cols*ratio, rows*ratio), squeeze=False)
for i in range(rows):
for j in range(cols):
if i*10 + j < n: # n 개까지만 그립니다.
axs[i, j].imshow(arr[i*10 + j], cmap='gray_r')
axs[i, j].axis('off')
plt.show()
draw_fruits(fruits[km.labels_==0])
inertia = []
for k in range(2, 7):
km = KMeans(n_clusters=k, random_state=42)
km.fit(fruits_2d)
inertia.append(km.inertia_)
plt.plot(range(2, 7), inertia)
plt.xlabel('k')
plt.ylabel('inertia')
plt.show()