출처: https://astrocosmos.tistory.com/202 [ASTROCOSMOS:티스토리] 하나둘셋넷 :: 하나둘셋넷
728x90

KT Aivle School 에이블스쿨 기자단] 9.25(월) ~ 10.1(일) 미프, 딥러닝, 코딩 테스트

내용

  • 미프 4일차 기억에 남는 부분 : 수치형 데이터를 만들기 위한 노가다...
  • 딥러닝 1일차 종합실습_carseat
  • 코딩 테스트 메일 도착

미프 4일차 기억에 남는 부분 : 수치형 데이터를 만들기 위한 반복 작업...

원본 데이터

 위의 데이터를 보면 수치형 데이터로 나타나지 않은 부분들이 있기 때문에 데이터 분석을 위하여 모두 수치형 데이터로 바꿀 필요가 있었고,

 "범주형 데이터"  ⇒ "수치형 데이터" 과정은 손가락 아픈 반복 작업이 필요했다

완성
완성을 위해 필요했던 코드

 미프가 다 끝나고 완성한 부분을 간추려 보니, 별거 아니라고 느껴지긴 하지만

 미프를 진행하는 동안에는 같은 작업을 여러 번 계속 하다보니 손가락이 아프게 느껴져 기억에 남는 부분 중 하나가 되었다.

 

딥러닝 1일차 종합실습_carseat

딥러닝 회귀 모델을 사용하여 carseat 종합실습을 진행하였다

데이터 설명
데이터 형태
코드 모습

 

* model을 생성하기 전에 필수는 아니지만 clear_session()을 하는 것이 권장된다.

코드는

from keras.backend import clear_session

clear_session()

 

* 모델을 생성할 때는 Sequential 모델을 사용하고, Dense 레이어를 이용

히든 레이어에는 relu를 activation으로 사용

 

from keras.models import Sequential

from keras.layers import Dense

 

model = Sequential([Dense(18 ,input_shape = (nfeatures,) , activation = 'relu' ),

                    Dense(4, activation='relu') ,

                    Dense(1) ] )

 

 

코딩 테스트 메일 도착

 

아직 코딩 실력이 부족하다고 느끼지만, 어차피 실전을 겪고 깨져봐야 실력이 늘거라 생각해서 시험을 신청했다

728x90
728x90

Oracle 세팅_SQL Plus

728x90
728x90

crosstab

pd.crosstab([output['clust']], output['상품타입'],margins=True)

 

728x90
728x90

K-means

  • yellowbrick
  • 선행 작업 문자형 수치형으로
  • 선행 작업  scaling
#[문제 1] 필요 라이브러리 로딩
# numpy, pandas, matplotlib, seaborn, os 를 임포트 하기

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import os

# 시각화 표에서 에러나는 부분 글꼴 셋팅

plt.rc("font", family = "Malgun Gothic")
sns.set(font="Malgun Gothic", 
rc={"axes.unicode_minus":False}, style='white')

# 지수표현(소수점 2자리까지 나타내기)

pd.options.display.float_format = '{:.2f}'.format


# [문제 2] 스케일링 한 데이터 불러오기
# 1. data 변수에 'scaler_data.csv' 파일을 불러와서 할당, 인코딩은 utf-8
# 2. data 변수 호출해서 상위 5개 확인해보기

data = pd.read_csv('scaler_data.csv', encoding = 'UTF -8 ')


import yellowbrick

from sklearn.cluster import KMeans
from yellowbrick.cluster import KElbowVisualizer

 

# Elbow Method 활용해서 k 값 구하기

  • yellowbrick의 k-Elbow Mehod를 활용해서 최적의 k 값을 구하기(k값 결정하기 쉽게 도와주는 함수)
#Elbow Method를 통해 최적의 군집 수 도출을 해보자.

from yellowbrick.cluster import KElbowVisualizer
from sklearn.cluster import KMeans

# 1. 모델 선언하기 (random_state=2023, n_init=10 으로 설정)
model_E = KMeans(random_state=2023, n_init=10)

# 2. KElbowVisualizer 에 k-means 모델과 k값 넣어서 만들기(Elbow_M 에 할당)
# k값은 k=(3,11)사이의 값중에서 찾는 것으로 넣으면 된다.

Elbow_M = KElbowVisualizer(model_E, k=(3, 11))

# 3. Elbow 모델 학습하기(fit)

Elbow_M.fit(data)

# 4. Elbow 모델 확인하기(show()활용)

Elbow_M.show()

 

yellow brick 이용 적절 k 찾기

 

선행 작업 문자형 수치형으로

# 상품타입'범주를 인코딩 해보기
# loc를 활용해서 '기본,중급'을 0으로 변환/ '고급'을 1로 변환

data_choice.loc[(data_choice['상품타입']=='기본') | (data_choice['상품타입']=='중급'),'상품타입'] = 0
#---------------------------------------------------------------
data_choice.loc[data_choice['상품타입']=='고급','상품타입'] = 1


# 데이터 안의 정보는 수치형이지만 dtype은 아직 object 이다. 범주형을 수치형으로 변경해 주자!
# astype-> float64 활용해서 변경 후 확인
data_choice_n = data_choice_n.astype('float64')

 

선행 작업 scaling

# min-max-scaler & standard-scaler import!(sklearn의 processing 활용)
from sklearn.preprocessing import MinMaxScaler, StandardScaler

#. scaler라는 변수에 MinMaxScaler 넣어주기
scaler = MinMaxScaler()

#. 'data_choice_n'을 'scaler_data' 변수에 fit-transform으로 fit 하기!
# 각 열을 스케일링
scaler_data = scaler.fit_transform(data_choice_n)
print("scaler_data",scaler_data)

# 컬럼은 이전 dataframe('data_choice_n') 에서 그대로 가져와서 'scaler_data.columns'에 할당하기
# 컬럼 가져오기
scaler_columns = data_choice_n.columns

pd.DataFrame(scaler_data, columns = data_choice_n.columns)



# 스케일링이 잘 되었는지 'scaler_data' 데이터를 확인해보자
scaler_data = pd.DataFrame(scaler_data, columns = data_choice_n.columns)
scaler_data
728x90

'데이터 - 머신러닝 비지도 학습' 카테고리의 다른 글

비지도 학습] PCA  (0) 2023.09.20
비지도 학습] k-means  (0) 2023.09.20
728x90

기법 정리 DecisionTreeRegressor & Random Search

 

회귀 문제

LinearRegression

KNeighborsRegressor

DecisionTreeRegressor

RandomForestRegressor

XGBRegressor

 

DecisionTree, Random Search

 

1) 라이브러리 불러오기

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

 

 

2) 데이터 준비

# x, y 분리

# medv : 본인 소유 주택 가
target = 'medv'

x = data.drop(target, axis=1)
y = data.loc[:, target]

# 학습용, 평가용 데이터 분리
from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state=1)

 

 

3) DecisionTreeRegressor

from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import cross_val_score
from sklearn.metrics import mean_absolute_error, r2_score

model_dt = DecisionTreeRegressor(random_state=1)

# 성능예측

cv_score = cross_val_score(model_dt, x_train, y_train, cv=5)

# 결과 확인

print(cv_score)
print(cv_score.mean())

 

 

4) 모델 튜닝

from sklearn.tree import DecisionTree
from skelarn.model_selection import RandomizedSearchCV

# max depth : 1~50
params = {'max_depth' : range(1,50)}

model_dt = DecisionTreeRegressor(random_state)

model = RandomizeCV(nidek_dt,
                                param,
                                cv =5,
                                n_iter = 20,
                                scoring = 'r2')

# 결과 확인
** model.cv_results_['mean_test_score'] : 테스트로 얻은 성능
** model.best_parms_ : 최적의 파라미터
** model.best_score_ : 최고 성능
print(model.cv_results_['mean_test_score'])
print('최적 파라미터:', model.best_params_)
print('최고 성능:', model.best_score

 

# 변수 중요도

## model.best_estimator_
plt.barh(  y = list(x), width = model.best_estimator_.feature_importances_) # 최선의 파라미터로 된 DecisionTree이다.

 

 

728x90
728x90

'기업정보요약_train.csv' & '재무제표정보_train.csv' 분석

import pandas as pd
import maplotlib.pyplot as plt
import os
os.listdir(os.getcwd())
data1 = pd.read_csv('기업정보요약_train.csv', encoding='UTF - 8')
display(data1)

 
 
data10 = pd.read_csv('재무제표정보_train.csv',encoding = 'UTF - 8')
display(data10)

중소기업 자본 형태, 자본 종류, 자본 합계 분석

# 결합하고 중소기업 정보 남기
data_small = pd.merge(data1, data10, on='BusinessNum', how = 'left' )
data_small = data_small.loc[ data['cpmSclNm'] =='중소기업']
data_small = data_small[ ['BusinessNum', '기업명', 'cmpSclNm', 'accNm', 'acctAmt']]
data_small

 

중소기업 자산데이터 종류 분석

display(data_small['accNm'].value_counts()

 

728x90
728x90

K-Means

1) 라이브러리 로딩
import pandas as pd
import numpy as np
import matplotlib.pyplt as plt
import sklearn as sns

2) 군집모델 만들기
model = KMeans(n_clusters = 2, init='auto')
model.fit(x)

pred = model.predict(x)

pred = pd.DataFrame(pred, columns = ['predicted'])

# 모델의 중심 좌표 얻기

centers = pd.DataFrame(model.cluster_centers_, columns = ['x1', 'x2'])

plt.scatter(result['x1'], result['x2'], c=result['predicted'], alpha=0.5)
plt.scatter(centers['x1'], centers['x2'], s=50, marker='D', c='r')
# k means 모델을 생성하게 되면 inertia 값을 확인 가능
model.inertia_

# k를 증가시켜가면서 inertia 구하기
kvalues = range(1,10)
inertias = []

for k in kvalues:
    model = KMeans(n_clusters=k, n_init = 'auto')
    model.fit(x)
    inertias.append(model.inertia_)

plt.plot(kvalues, inertias, '-o')
plt.xlabel('number of clusters, k')
plt.ylabel('inertia')
plt.grid()
plt.show()
 

K-Means 실습

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

from sklearn.cluster import KMeans
from sklearn,preprocessing import MinMaxScaler
# 군집화 할 변수 선택
x = data.loc[:, ['Age', 'Income', 'Score' ] ]
스케일링
scaler = MinMaxScaler()
x_s = scaler.fit_transform(x)

# k값을 늘려가면서(1~20) 모델을 만들어, inertia 값을 저장
# 그래프를 통해 최적의 k값 결정


# 반복문으로 KMeans 모델
kvalues = range(1,21)
iv = []

for k in kvalues:
    model = KMeans(n_clusters = k, n_init='auto')
    model.fit(x_s)
    iv.append(model.inertia_)

# 그래프 그려서 적절한 k값 찾기
plt.plot(kvalues, iv, marker='.')
plt.grid()
# 적절한 k 찾으면 모델 선언
model = KMeans(n_clusters=5, n_init = 'auto', random_state=10)

한 번에 분석하기

# 'Age', 'Income', 'Score', 'pred'만 추출

temp = result.loc[:, ['Age', 'Income', 'Score', 'pred' ]]

sns.pairplot(temp, hue = 'pred')
plt.show()

 

 

728x90
728x90

회귀 KNeighborsRegression

 

라이브러리 불러오기

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split

 

변수 제거", "데이터 분리", "가변수화

# 변수 제거
del_cols = ['컬럼명']
data.drop(del_cols, axis=1, inplace = True)

# 데이터 분리
target = '타겟 컬럼'
x = data.drop(target, axis=1)
y = data.loc[:,target]

# 가변수화
dum_cols = ['컬럼명', '컬럼명', '컬럼명']
x = pd.get_dummies(x, columns = cols, drop_first = True)

 

학습용 평가용 데이터 분리, 정규화

# 학습용, 평가용 데이터 분리
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 1)

# 정규화
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
scaler.fit(x_train)
x_train = scaler.transform(x_train)
x_test = scaler.transform(x_test)

 

성능 예측

from sklearn.neighbors import KNeighborsRegression
728x90
728x90

분류 - LogisticRegression

 

1. 라이브러리 불러오기

import pandas as 

impot numpy as np

import maplotlib.pyplot as plt

import seaborn as sns

 

2. 데이터 불러오기

data = pd.read_csv('데이터.csv')

 

3. 학습용 평가용 데이터

from sklearn.model_selectoin import train_test_split

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state=2023)

 

4. 모델링

# 1단계 : 불러오기

from sklearn.linear_model import LogisticRegression

from sklearn.metrics import confision_matrix, classification_report

# 2단계: 선언하기

model = LogisticRegression()

# 3단계 : 학습하기

model.fit(x_train, y_train)

 

학습 되었을 떄 출력

# 4단계 : 예측하기

y_pred = model.predict(x_test)

# 5단계 평가하기

print(confusion_maxtrix(y_test, y_pred))

print(classification_report(y_test, y_pred))

평가 데이터 출력 모습

 

필기

수업시간 필기 1

 

필기 2

수업시간 필기 2

 

728x90

+ Recent posts