Service
home
WOW Onboarding
home
🤖

[AI 정규 스터디 4주차 과제] 로지스틱 회귀와 SGD

들어가기 앞서

 4주차 스터디를 듣느라 고생하셨습니다!
4주차 과제는 수업시간에 실습한 내용을 바탕으로 진행됩니다.
단순히 코드를 옮겨 적는 것이 아니라, 각 코드가 머신러닝 과정의 어떤 단계에 해당하는지를 이해해 주세요.
먼저, 수업시간에 작성한 코드를 그대로 실행하여 전체 흐름을 다시 확인해주세요. 이후, 제공된 코드 아래에 이어서 직접 코드를 작성하며 과제를 수행해주세요.
모르는 부분이 생긴거나 궁금하다면 디스코드 #정규스터디-질문방 에 질문해주세요!

4주차 스터디 영상과 강의록

강의 녹화본
토요일 공지 예정
강의록
AI 정규스터디 4주차.pdf
73.1 MiB

과제

목표

수업시간의 내용을 직접 실습을 통해 익혀보아요.
로지스틱 회귀 모델과 SGD를 이해해보아요.

제출해야 할 파일

AI_정규_4주차.ipynb & wil.md
AI_정규_4주차.ipynb - 코드 (실습 + 과제)
wil.md- 배운 점 & 느낀 점 (300자 이상)

과제 명세서 - AI_정규_4주차.ipynb

수업시간에 실습한 내용과제하나의 파일 AI_정규_4주차.ipynb에 작성하여 제출해주세요.

수업시간 내용 실습

import pandas as pd fish=pd.read_csv('http://bit.ly/fish_csv_data') fish.head()
Python
복사
print(pd.unique(fish['Species'])) fish_input=fish[['Weight','Length','Diagonal','Height','Width']] fish_input.head()
Python
복사
fish_target=fish['Species'] from sklearn.model_selection import train_test_split train_input,test_input,train_target,test_target=train_test_split(fish_input,fish_target, random_state=42)
Python
복사
from sklearn.preprocessing import StandardScaler ss=StandardScaler() ss.fit(train_input) train_scaled=ss.transform(train_input) test_scaled=ss.transform(test_input)
Python
복사
from sklearn.neighbors import KNeighborsClassifier kn=KNeighborsClassifier(n_neighbors=3) kn.fit(train_scaled,train_target) print(kn.score(train_scaled,train_target)) print(kn.score(test_scaled, test_target))
Python
복사
print(kn.classes_) print(kn.predict(test_scaled[:5])) import numpy as np proba=kn.predict_proba(test_scaled[:5]) print(np.round(proba,decimals=4))
Python
복사
char_arr=np.array(['A','B','C','D','E']) print(char_arr[[True,False,True,False,False]])
Python
복사
bream_smelt_indexes=(train_target=='Bream')|(train_target=='Smelt') train_bream_smelt=train_scaled[bream_smelt_indexes] target_bream_smelt=train_target[bream_smelt_indexes]
Python
복사
from sklearn.linear_model import LogisticRegression lr=LogisticRegression() lr.fit(train_bream_smelt,target_bream_smelt) print(lr.predict(train_bream_smelt[:5]))
Python
복사
print(lr.predict_proba(train_bream_smelt[:5]))
Python
복사
print(lr.classes_)
Python
복사
lr = LogisticRegression(C=20, max_iter=1000) lr.fit(train_scaled, train_target) print(lr.score(train_scaled, train_target)) print(lr.score(test_scaled, test_target))
Python
복사
print(lr.predict(test_scaled[:5]))
Python
복사
proba=lr.predict_proba(test_scaled[:5]) print(np.round(proba,decimals=3))
Python
복사
print(lr.coef_.shape,lr.intercept_.shape)
Python
복사
import pandas as pd fish=pd.read_csv('http://bit.ly/fish_csv_data')
Python
복사
fish_input=fish[['Weight','Length','Diagonal','Height','Width']] fish_target=fish['Species']
Python
복사
from sklearn.model_selection import train_test_split train_input,test_input,train_target,test_target=train_test_split(fish_input,fish_target, random_state=42)
Python
복사
from sklearn.preprocessing import StandardScaler ss=StandardScaler() ss.fit(train_input) train_scaled=ss.transform(train_input) test_scaled=ss.transform(test_input)
Python
복사
from sklearn.linear_model import SGDClassifier sc=SGDClassifier(loss='log_loss', max_iter=10, random_state=42) sc.fit(train_scaled,train_target) print(sc.score(train_scaled,train_target)) print(sc.score(test_scaled,test_target))
Python
복사
sc.partial_fit(train_scaled,train_target) print(sc.score(train_scaled,train_target)) print(sc.score(test_scaled,test_target))
Python
복사
import numpy as np sc=SGDClassifier(loss='log_loss', random_state=42) train_score=[] test_score=[] classes=np.unique(train_target)
Python
복사
for _ in range(0,300): sc.partial_fit(train_scaled,train_target,classes=classes) train_score.append(sc.score(train_scaled,train_target)) test_score.append(sc.score(test_scaled,test_target))
Python
복사
import matplotlib.pyplot as plt plt.plot(train_score) plt.plot(test_score) plt.xlabel('epoch') plt.ylabel('accuracy') plt.show()
Python
복사
sc=SGDClassifier(loss='log_loss', max_iter=100, tol=None, random_state=42) sc.fit(train_scaled, train_target) print(sc.score(train_scaled, train_target)) print(sc.score(test_scaled, test_target))
Python
복사
위 내용까지는 수업시간에 실습한 내용입니다.
아래부터는 과제에 해당하므로, 이어서 셀을 추가하여, 코드를 직접 작성해주세요.

과제

# 1번 과제 ''' 과제 설명: 로지스틱 회귀 모델을 사용해 새로운 데이터셋에 대한 예측 결과 출력 과제 순서: fish=pd.read_csv('http://bit.ly/fish_csv_data') 1. 위의 코드를 사용해 데이터셋을 가져오기 2, 가져온 데이터셋을 테스트 세트와 훈련 세트로 분리 (당연히 먼저 입력과 타깃부터 분리해야겠죠?) 3. 표준 정규화 4. 로지스틱 회귀 모델 훈련 5. 로지스틱 회귀 모델로 새로운 데이터셋 예측값 출력 6. 각 예측 결과에 대한 7종의 물고기 별 확률 출력 ''' # 새로운 데이터 셋 ''' test_data = np.array([ [350.0, 29.0, 33.5, 10.50, 4.60], [18.5, 12.5, 14.0, 2.30, 1.35], [820.0, 41.5, 45.0, 7.80, 5.10], [160.0, 21.0, 23.5, 6.20, 3.60], [550.0, 26.5, 31.0, 13.80, 6.10] ]) ''' # AI의 도움을 받으시는것도 좋습니다 그러나 코드의 구성과 결과에 대해서는 정확히 알고 계시는걸 추천합니다
Python
복사
# 2번 과제 ''' 과제 설명: SGD classifier 모델을 훈련시키고 최적의 에포크 값을 찾기 과제 순서: fish=pd.read_csv('http://bit.ly/fish_csv_data') 1. 위의 코드를 사용해 데이터셋을 가져오기 2. SGDclassifier 모델 훈련 (loss 파라미터는 hinge로 설정, 에포크수는 10으로 설정) 3. SGDclassifier 모델 훈련 (loss 파라미터는 hinge로 설정, 에포크수는 300으로 설정) 4. 매 에포크마다 훈련 점수와 테스트 점수 기록 5. 에포크를 x축 정확도를 y축으로 하는 matplotlib 그래프 그리기 6. 눈으로 보고 적절한 에포크 수 찾기 7. 해당 에포크 수로 모델 훈련하고 점수 출력해 2번 과정의 에포크 10인 모델과 정확도 비교 ''' # AI의 도움을 받으시는것도 좋습니다 그러나 코드의 구성과 결과에 대해서는 정확히 알고 계시는걸 추천합니다
Python
복사

과제 명세서 - wil.md

4주차 수업을 통해 배운 점 혹은 느낀 점을 작성해주세요.

마감 기한

5월 7일 (목) 23:59까지

제출 방법

자신의 레포지토리에 weekn 폴더를 생성해 .ipynb파일과 wil.md 파일을 제출합니다. 더 자세한 사항은 아래 링크를 참조해주세요.