오늘보다 더 나은 내일의 나에게_

비전공자의 IoT 국비 교육 수강일지 Day_83 본문

비전공자의 코딩일지

비전공자의 IoT 국비 교육 수강일지 Day_83

chan_96 2022. 4. 15. 17:26
728x90

머신러닝

일반화, 과대적합, 과소적합

일반화(Generalization)
- 훈련세트로 학습한 모델이 테스트 세트에 대해 정확히 예측 하도록 하는 것

과대적합(Overfitting)
- 훈련 세트에 너무 맞추어져 있어 테스트 세트의 성능 저하

과소적합(Underfitting)
- 훈련 세트를 충분히 반영하지 못해 훈련 세트, 테스트 세트에서 모두 성능이 저하
일반화 성능이 최대화 되는 모델을 찾는 것이 목표

과대적합
- 너무 상세하고 복잡한 모델링을 하여 훈련데이터에만 과도하게 정확히 동작하는 모델

과소적합
- 모델링을 너무 간단하게 성능이 제대로 나오지 않는 모델

 

모델 복잡도 곡선

해결방법

- 주어진 훈련데이터의 다양성이 보장되어야 한다. 다양한 데이터 포인트를 골고루 나타내야 한다.

- 일반적으로 데이터 양이 많으면 일반화에 도움이 된다.

- 하지만 편중된 데이터를 많이 모으는 것은 도움이 되지 않는다.

- 규제(Regularization)를 통해 모델의 복잡도를 적정선으로 설정한다.

크롤링 기본개념

웹 크롤링 흐름

크롤링 실습

import requests as rq #서버에 요청을 보내는 도구
from bs4 import BeautifulSoup #응답받은 문서에서 데이터를 추출하는 도구​

#네이버 포켓몬빵 검색결과 주소
url = 'https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=%ED%8F%AC%EC%BC%93%EB%AA%AC%EB%B9%B5'
res = req.get(url) #요청보내기
res.status_code
#=> 200 응답성공
res.text
res.text 출력 결과
naver_dom = BeautifulSoup(res.text,'html.parser') #파싱할 데이터, 파서
a = naver_dom.select("div.news_area > a.news_tit") #선택자를 이용해서 원하는 태그들을 추출하는 기능
a[0]​
a[0] 출력 결과
a[0].text 출력 모습
for tag in a:
    print(tag.text)

#출력결과
#포켓몬빵 애벌레 발견…제조사 "빵 회수해 원인 조사"
#‘포켓몬빵’ 오픈런 열풍...포켓몬코리아 매출 3배 ‘껑충’
#[단독] ‘포켓몬빵’서 벌레 발견…“아이들 먹는 건데 철저히 관리해야”
#'노재팬' 식었나…죽쑤던 데상트·미즈노·아식스 줄줄이 흑자전환​

 

이미지 크롤링
url2 = 'https://search.naver.com/search.naver?where=image&sm=tab_jum&query=%ED%8F%AC%EC%BC%93%EB%AA%AC%EB%B9%B5'
res = req.get(url2)
res.status_code #200
res.text

naver_img_dom = BeautifulSoup(res.text,'html.parser')
img_tags = naver_img_dom.select('img._image._listImage')
img_tags​
# => 출력결과 X
  • 현재 requests로 이용해서 얻어오는 페이지는 동적으로 나중에 정보를 삽입하기 때문에 내가 원하는 정보를 추출하기 어렵다.
  • 동적인 페이지는 selenium을 활용해 수집한다.
크롬브라우저용 제어도구 링크
버전 확인하고 다운로드
=> 다운로드 후 파일 위치이동(주피터노트북 폴더로 이동)

# selenium 설치
!pip install selenium
from selenium import webdriver # 브라우저 객체
browser_obj = webdriver.Chrome() # 크롬 브라우저 객체 생성​
browser_obj.get(url2)
naver_img_dom2 = BeautifulSoup(browser_obj.page_source,'html.parser')
img_tags = naver_img_dom2.select('img._image._listImage')
len(img_tags) #img_tags 갯수 확인
img_tags[0]
img_tags[0] 출력 결과
src = img_tags[0].get('src') #태그의 속성을 추출하는 기능
src
#'https://search.pstatic.net/common/?src=http%3A%2F%2Fblogfiles.naver.net%2FMjAyMjA0MDdfOTAg%2FMDAxNjQ5MzE3NjAyODE2.iak0_eMIFUP9Erd0AQOXBUXnKQQYghtBtnhhuBNPBbkg.OPe1_A0_3sUIAeN2F_gDnhqEG_kZHU9nUNNDnq8NYzUg.JPEG.ehdgns104%2F1649316331745%25A3%25AD3.jpg&type=a340'​

from urllib.request import urlretrieve # url로부터 파일을 다운받는 기능
dest = "./포켓몬빵.png" //경로 위치 변수
urlretrieve(src,dest) # 다운받을 원본의 URL, 다운로드할 경로
# => ('./포켓몬빵.png', <http.client.HTTPMessage at 0x1e4d4f26ac0>)​

 

728x90
Comments