
데이터 파악

-> 결측치 없는 것을 확인
-> 피처들은 와인의 성분이나 특징들을 나타내고 있고, 타겟 제외하고는 숫자형데이터가 맞는 것을 확인
타겟 속성 변경 및 파악


- 범주형-순서형데이터인 것을 확인 -> 라벨인코더 사용 예정
- 종속변수가 대략 정규분포를 따르는 것 같다는 것 확인
박스 플랏

-> 바운더리를 넘어가는 데이터가 많은 것을 확인
-> 매우 큰 특징을 보여주는 데이터가 없어 보인다.
각 피처들의 스케터 플랏으로 타겟의 군집 확인

-> 5점과 6점이 서로 뭉쳐있는 경향을 확인
-> 이외에 딱히 어떤 경향이나 군집은 찾기 어려워보인다.
히트맵으로 상관관계 파악

-> 눈에 띄는 것은 'alcohol', 'density' 두컬럼이 서로 어느정도 상관관계가 있다는 것
-> 이외에 상관관계에서 특이점은 없어보인다.
def remove_outliers(df, column, threshold=1.5):
"""
주어진 열에서 IQR을 기준으로 이상치를 제거하는 함수
"""
Q1 = df[column].quantile(0.25)
Q3 = df[column].quantile(0.75)
IQR = Q3 - Q1
# IQR 범위 내에 있는 데이터만 선택
df_filtered = df[(df[column] >= Q1 + (-1 * threshold) * IQR) & (df[column] <= Q3 + threshold * IQR)]
return df_filtered
워낙 많은 데이터가 이상치에 포한되어서 IQR의 2.5배 바운더리 바깥의 값들 제거

모델에 넣기 전에 최종
le = LabelEncoder()
le.fit_transform(df_remove_outliner['quality'])
y = le.fit_transform(df_wine_predic['quality'])
np.unique(y, return_counts=True)
ss = StandardScaler()
train_X_sc = ss.fit_transform(df_remove_outliner[df_remove_outliner.columns[:-1]])
test_X_sc = ss.transform(test_X)
params = {
'max_depth' : [None, 2,3,4],
'n_estimators' : [50, 100, 150, 200],
'max_features' : ["sqrt", "log2", None, 0.5],
}
model_rf = RandomForestClassifier(random_state=13, n_jobs=-1, oob_score=True)
grid_cv = GridSearchCV(model_rf, param_grid=params, cv=3, n_jobs=-1)
grid_cv.fit(train_X_sc, train_Y_ed)
print(grid_cv.best_estimator_)

rf_clf_best = grid_cv.best_estimator_
rf_clf_best.fit(train_X_sc, train_Y_ed)
pred_rf = rf_clf_best.predict(test_X_sc)
accuracy_score(test_Y, pred_rf)
# 결과는 테스트 데이터의 정확도


은닉노드와 출력 노드에 존재, 해당 노드에 입력된 값을 변환하여 출력하는 역할 수행
활성화함수의 역할
비선형함수 - 독립변수와 종속변수 간에 존재할 수 있는 비선형 관계를 파악하기 위함
선형함수는 아무리 사용해도 선형이다.
출력노드의 활성화 함수
회귀문제: 없음 (또는 항등함수)
분류문제: 보통 소프트맥스 함수 사용
은닉노드의 활성화 함수


-> 많은 종류가 있으나 ReLU 함수를 많이 쓴다
- 이유 1 : 시그모이드, 하이퍼볼릭 탄젠트는 좌우로 값이 커지면 기울기 소실이 일어난다. -> 층을 거쳐서 역전파 될때마다 가중치의 변화가 없어짐
신경망의 예측이 실제 데이터와 얼마나 잘 일치하는지를 측정하는 데 사용
모델 최적화
학습 과정은 비용 함수의 값을 최소화하기 위해 가중치와 편향을 조정하는 과정
결론적으로 학습은 비용함수 줄이기다.
비용함수 종류
- 분류 문제
교차 엔트로피

- 회귀 문제
평균 제곱 오차

-> 왜 절대값을 하지않고 제곱을 하는가?
-> 오차의 값을 부각시켜서 더 빠르게 학습시킬 수 있고, 연산 속도가 빠르다
이외의 비용함수 (회귀)

이외의 비용함수 (분류)


비용함수 정리
문제의 종류에 따라 구분(회귀, 분류)
실제의 종속변수 값과 모형을 통한 예측치로 구성(라벨과, 예측값의 차이)
출력노드에서 출력된 값
- 회귀 : 종속변수 값의 예측치 출력
- 분류 : 종속변수가 특정한 값을 갖을 확률
체인룰을 사용해서 각각의 입력값이 상위의 출력값의 미분을 구한다.
역전파 과정 (딥러닝 프로세스)

-> 손실함수에 대한 각가중치의 편미분 값에 학습률을 곱하여, 가중치의 오차를 줄여나감
-> 배치사이즈와 학습률에 영향을 받음
학습률

-> 학습률이 작으면 수렴까지 오래걸림. 에포크가 충분하지 못하면 수렴못한다.
-> 학습률이 크면 진동이 심해서 발산할 수 있다.
로컬미니멈, 안장지점
피처가 하나 추가될때마다, 손실함수의 차원수가 1개씩 늘어난다.
따라서 각각의 피처마다 편미분의 값이 최소점을 가지는데, 함수가 복잡하다면 로컬 미니멈에 빠질 수 있다.

손실 함수의 기울기(gradient)를 계산, 이를 사용하여 모델의 가중치 업데이트
종류



