머신러닝 2주차 숙제

준표장·2022년 10월 12일
0

실전 머신러닝

목록 보기
3/4
post-thumbnail
  1. 처음 내 key 데이터 입력

    import os
    os.environ['KAGGLE_USERNAME'] = 'joonpyojang' # username
    os.environ['KAGGLE_KEY'] = '4c50da3eb86b3e5ddcddb419b33c5985' # key
  2. 데이터 url 로 불러와 알집 풀기

    !kaggle datasets download -d kandij/diabetes-dataset
    
    !unzip diabetes-dataset.zip
  3. 사용하는 툴 import

    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import Dense
    from tensorflow.keras.optimizers import Adam, SGD
    #tensorflow를 가지고 논리 회귀 구현
    import numpy as np
    import pandas as pd
    #데이터셋 csv 파일을 읽어줌
    import matplotlib.pyplot as plt 
    #그래프 그리기
    import seaborn as sns
    #그래프 그리기
    from sklearn.model_selection import train_test_split
    #traning set 과 validatation set 나눠줌
    from sklearn.preprocessing import StandardScaler
    #전처리용
  4. 데이터 csv 파일 df 저장 후 확인

    df = pd.read_csv('diabetes2.csv')
    
    df.head(5)

  5. 만약 데이터에 이름이 없을 시 이름 지정

    df = pd.read_csv('train_and_test2.csv', usecols=[
      'Age', # 나이
      'Fare', # 승차 요금
      'Sex', # 성별
      'sibsp', # 타이타닉에 탑승한 형제자매, 배우자의 수
      'Parch', # 타이타니게 탑승한 부모, 자식의 수
      'Pclass', # 티켓 등급 (1, 2, 3등석)
      'Embarked', # 탑승국
      '2urvived' # 생존 여부 (0: 사망, 1: 생존)
    ])
    #usecols로 사용할 colum 만 따로 추출하여 저장
    
    df.head(5)
  6. null 데이터 있는지 확인하고 있으면 drop

    print(df.isnull().sum())
    
    print(len(df))
    
    df = df.dropna()
    #비워져 있는 데이터를 제거
    
    print(len(df))
  7. x , y 데이터 분활 및 지정

    x_data = df[['BMI','DiabetesPedigreeFunction','Age']]
    x_data = x_data.astype(np.float32)
    y_data = df[['Outcome']]
    y_data = y_data.astype(np.float32)
    #32 비트 소수점으로 만들어줘야 keras에서 사용이 가능하다
    #outcome 데이터가 당요병 유무이기 때문에 해당 유무로 데이터를 구분
    
    x_data.head(5)
    y_data.head(5)

    특정 데이터만 입력할때

    x_data = df.drop(columns=['Outcome'], axis=1)
    x_data = x_data.astype(np.float32)
    y_data = df[['Outcome']]
    y_data = y_data.astype(np.float32)

    x축에 Outcome 이외의 데이터 입력

  8. 데이터 표준화 작업

    scaler = StandardScaler()
    #scaler 정의
    x_data_scaled = scaler.fit_transform(x_data)
    #데이터 표준화 시켜주기
    
    print(x_data.values[0])
    print(x_data_scaled[0])
  9. 학습 데이터 분활

    x_train, x_val, y_train, y_val = train_test_split(x_data, y_data, test_size=0.2, random_state=2021)
    
    print(x_train.shape, x_val.shape)
    print(y_train.shape, y_val.shape)
  10. 모델 학습

    model = Sequential([
      Dense(1, activation='sigmoid')
      #actication 함수에 sigmoid를 넣어주면 sigmoid 함수를 실행한다. linear regression을 한번 하고 실행
    ])
    
    model.compile(loss='binary_crossentropy', optimizer=Adam(lr=0.01), metrics=['acc'])
    #이진 논리회귀에서는 binary_crossentropy을 사용한다. metrics는 loss 값만 보고 데이터가 학습이 잘되는지 확인할 수 없어 정확도를 0-1로 보여준다.
    model.fit(
        x_train,
        y_train,
        validation_data=(x_val, y_val), # 검증 데이터를 넣어주면 한 epoch이 끝날때마다 자동으로 검증
        epochs=20 # epochs 복수형으로 쓰기!
    )

    다항 논리 회로일때는 sigmoid 대신 softmax 를 사용

profile
개발일지용 메모장

0개의 댓글