728x90
반응형

1. 고윳값 판단

data['class'].unique() # 목표 변수의 고윳값 출력 ==> 0과 1로 이루어진 이진변수가 아닌 3개이상으로 이루어진 범주형 변수

==> array([0,1,2])

data['class'].nunique()  # 고윳값의 갯수 ==> 와인을 3개의 등급으로 나눈다.

==> 3

data['class'].value_counts() # 각 고윳값에 해당하는 개수 출력

fig = plt.figure(figsize = (15,8))

ax = sns.countplot(data['class'])
ax = sns.barplot(x = data['class'].value_counts().index , y=data['class'].value_counts())

==> barplot, countplot 둘다 동일한 결과값 얻을 수 있다.

2. 결측치 제거

 

data.dropna(subset = ['alcohol'])

==> 지정된 변수의 결측치 행만 제거하기 ==> alcohol의 열의 결측치 존재하는 행 제거

 

data.drop(['alcohol' , 'nonflavanoid_phenols'] , axis = 1) #변수를 제거하기

==> 아예 열 제거

data.fillna(data.mean()) #평균적으로 결측치 채우기

==> 결측치에 대해 해당 열의 평균으로 대체

 

 

 

1. 일반적으로 dropna()를 사용하여 결측치 행 채우기

2. 통상적으로 결측치가 데이터의 50%이상이면 drop()을 고려해볼 만하고, 70~80%이 상이면 drop()을 적용하는 것이 좋다. ==> 결측치가 너무 많으면 삭제하는 것이 좋다.

3. 결측치의 경우 평균을 채워넣는다 하더라도 노이즈 발생 가능성 ==> 중위값 사용도 가능

data.fillna(data.median() , inplace=True) #평균적으로 결측치 채우기

3. 스케일링

==> 스케일링은 데이터의 스케일(scale)을 맞추는 작업

 

KNN 알고리즘의 경우 거리기반 알고리즘 

 

==> alcohol 열의 최솟값 : 11.03,  최대값 : 14.75

 

==> magnesium(최솟값 : 70 , 최대값 : 162)에서의 1은 완전 다른 영향을 미친다.

 

==> 왜곡된 예측 가능

from sklearn.preprocessing import StandardScaler, MinMaxScaler , RobustScaler
#한 라이브러리에서 여러 모듈 임포트

==> 사이킷런 라이브러리의 preprocessing 모듈 사용

4. 표준화 스케일링

==> 평균이 0이 되고, 표준편차가 1이 되도록 데이터를 고르게 분포시키는데 사용

 

==> 데이터에 아웃라이어가 존재할 때 아웃라이어의 영향을 받는다. 평균 0, 분산 1이 되게끔 분포시키기 때문에, 데이터의 기존 분포 형태가 사라지고 정규분포를 따르는 결과물을 가져온다.

st_scaler = StandardScaler() #스케일러 지정
st_scaler.fit(data) # 학습, 스케일링에 필요한 정보(평균 , 표준편차)가 학습된다.
st_scaled = st_scaler.transform(data) #학습에서 얻은 정보 계산
st_scaled

표준화스케일링 결과값

pd.DataFrame(st_scaled , columns = data.columns)

표준화스케일링 칼럼값 추가

https://knowallworld.tistory.com/254

 

정규분포의 표준정규분포로의 변환★기초통계학-[Chapter06 - 연속확률분포-03]

1. 정규분포와 표준정규분포의 관계 =========================== ==> P(z_a =2.5 , facecolor = 'skyblue') # x값 , y값 , 0 , x= 2.5) = P(Z 박테리아의 수가 75마리 이상 103마리 이하일 확률 P(75

knowallworld.tistory.com

표준정규분포 변환

==> fit() 함수로 학습을 시켜주는 과정에서 각 컬럼의 평균과 표준편차가  st_scaler에 기억되고, transform()을 적용하면 그 값들을 이용하여 위의 수식으로 연산

round(st_scaled.describe(), 2)

표준화스케일링의 통계정보

 

5. 로버스트 스케일링

==> 데이터에 아웃라이어가 존재하고, 그 영향력을 그대로 유지하고 싶을 때 사용

rb_scaler = RobustScaler() #로버스트 스케일링에 사용할 객체를 생성
rb_scaled = rb_scaler.fit_transform(data) #로버스트 스케일링 ==> fit과 transform이 합쳐졌다.
rb_scaled = pd.DataFrame(rb_scaled , columns = data.columns)
round(rb_scaled.describe(), 2)

==> 평균과 표준편차 대신 사분위값을 이용하여 계산한다.

==> 데이터에 아웃라이어가 존재할 때, 아웃라이어의 영향을 받지 않는다. 변환된 데이터의 범위는 표준화 스케일링이나 최소-최대 스케일링보다 넓게 나타난다.

 

6. Min-Max 스케일링

==> 데이터 분포의 특성을 최대한 그대로 유지하고 싶을 때 사용

mm_scaler = MinMaxScaler() #최소-최대 스케일링 객체 생성
mm_scaled = mm_scaler.fit_transform(data) # 최소-최대 스케일링
mm_scaled = pd.DataFrame(mm_scaled , columns= data.columns)
round(mm_scaled.describe() , 2)

==> 최소-최대 스케일링의 특징은 모든 컬럼에서 최댓값이 1 , 최솟값이 0인 형태로 변환된다는 것이다.

 

==> 각 값에서 최솟값을 빼주고, 최대값의 차이만큼 나눠준다.

 

최소-최대 스케일링

==> 표준화 스케일링과 마찬가지로 아웃라이어의 영향을 받게 된다. 위의 두 스케일러와 비교했을 때 데이터의 기존 분포를 가장 있는 그대로 담아내며, 스케일만 변화시킨다. 데이터의 범위는 0~ 1이다.

7. 정규화 스케일링

==> 행 기준의 스케일링이 필요할 때 사용, 거의 사용X

 

 

8. 스케일링 적용

round(mm_scaled.describe() , 2)
#%%
from sklearn.model_selection import train_test_split
X_train , X_test, y_train , y_test = train_test_split(data.drop('class' , axis= 1) , data['class'] , test_size=0.2, random_state=100) #학습셋과 시험셋 분리

==> 데이터 셋 분할

==>  test_size (시험 셋) ==> 20% , random_state = 100 ==> 랜덤 샘플링

 

==> 랜덤 샘플링이란 데이터를 특정 비율로 나눌 때 마구잡이로 뒤섞어서 나누는 것

https://knowallworld.tistory.com/371

 

[PYTHON - 머신러닝_선형회귀]★선형회귀★seaborn 타원만들기★모델 평가방법 RMSE , R**2★model.coef_(

1. 선형회귀 ==> 가장 기초적인 머신러닝 모델 ==> 여러가지 데이터를 연속형 변수인 목표 변수를 예측해 내는 것이 목적이다. ==> 몸무게, 나이 , BMI, 성별 등의 데이터를 활용하여 연속형 변수를

knowallworld.tistory.com

1> 하이퍼 파라미터 튜닝하기

knn = KNeighborsClassifier() #KNN 모델 생성
knn.fit(X_train_scaled , y_train) #학습
pred = knn.predict(X_test_scaled) #예측

pred
from sklearn.metrics import accuracy_score
accuracy_score(y_test , pred)

==> y_test와 예측값인 pred가 얼마나 일치하는지 알아보기 위하여 accuracy_score 사용

 

score = []
for i in range(1, 21):
    knn = KNeighborsClassifier(n_neighbors= i) # knn 모델 생성
    knn.fit(X_train_scaled , y_train)
    pred = knn.predict(X_test_scaled)
    score.append(accuracy_score(y_test, pred))

score

==> 최적의 가중 매개변수 선택하기

 

9. K-최근접 이웃

==> KNN 알고리즘은 새로운 데이터를 예측할 때 , 거리를 기반으로 하여 인접한 데이터와 같은 종류로 분류

 

 

 

 

출처 : 데싸노트의 실전에서 통하는 머신러닝

(Golden Rabbit , 저자 : 권시현)

※혼자 공부용

 

 

 

728x90
반응형

+ Recent posts