새로운 것을 배울때마다 끊임없이 이전에 배운 것을 곱씹자.. 안그럼 잊어버린다...
새로운 것을 배우는 것이 중요한 것이 아니다. 배운 것을 잊어버리지 않는 것이 중요하다.
간단요약
2. 추천시스템 만들기
2-1. 협업 필터링
많은 사람들(큰 무리)의 생각들을 기준으로, 특정 사람의 생각을 추천해 나가는 과정
2-2. 선호 정보 수집
데이터를 딕셔너리로 보관
2-3. 유사 사용자 찾기(사람에게 사람을 추천)
유사도를 측정하기 - 유클리디안 거리점수, 피어슨 상관계수 이용
나와 비슷한 생각을 가진 사람 찾기
2-4. 항목 추천(사람에게 물건을 추천)
나에게 없는 항목을 추천하기
> 나와 비슷한(유사도) 생각을 가진 사람의 항목에 더 가중치를 두어서 판단
2-5. 제품 매칭
사람과 물건을 바꿈(대칭행렬)
물건에게 사람을 추천, 물건에게 물건을 추천
2-6. 딜리셔스 링크 추천 기능 만들기
생략(사이트 접속 불가)
2-7. 항목 기반 필터링
항목간의 유사도를 미리 계산해서 딕셔너리로 보관
사람에게 물건을 추천(미기 계산한 딕셔너리 이용)
2-8. 무비렌즈 데이터 세트 이용하기
데이터가 많다... 시간이 오래걸린다... 분산처리 방식이 필요하다...
사용자 기반 추천 기법 이용
항목 기반 추천 기법 이용
2-9. 사용자 기반 필터링과 항목 기반 필터링
데이터의 희박 정도 : 1- (각 사람들과 관련된 항목 개수 / 전체 항목 개수)
항목 기반 필터링 :
장점 : 큰 데이터 세트인 경우 사기필보다 유리, 희박한 데이터세트인 경우 사기필보다 유리 (조밀한 경우 둘다 유리)
단점 : 항목 유사도 테이블의 최신 유지에 추가부담
사용자 기반 필터링(사기필) :
장점 : 구현 용이, 추가 단계 없음, 자주 변경되고, 데이터 세트가 적은 경우
2-10. 함께 풀어보기
*사용된 라이브러리
from math import sqrt # 제곱근
from operator import itemgetter # sort 할때
3.군집 발견
3-1. 감독 대 무감독 학습
감독 학습(지도 학습) : 신경망, 결정트리, SVM, 베이지안 필터링
무감독 학습(비지도 학습) : NMF, SOM
3-2. 단어 벡터
RSS 접속해서 단어의 출현 빈도 측정
3-3. 계층적 군집화
블로그이름과 단어들의 출현빈도(0,1,1,1,0,0,1,1,1,,,)를 하나의 데이터로 간주하고, 데이터간의 유사도를 이용해서 군집한다.
군집화 : 초기 가장 유사도가 높은 2개를 찾아서 묶어서 합치고 새로운 가상 데이터를 만든다. 초기 real 데이터가 없어질 때까지 반복한다.
각 개별 데이터를 클래스로 관리(bicluster), 클래스안에 클래스가 존재하는 tree 형태로 구성. 1클래스를 left, right 두개의 클래스만 보유 가능
3-4. 계통도 출력
PIL 을 이용해 화면에 tree 형태로 출력
3-5. 세로줄 군집화
블로그명과 단어사이의 관계를 뒤집음(대칭행렬)
3-6. K평균 군집화
K개의 중심점 주변으로 군집을 생성하기 - 자리찾기
계층적 군집화 기법보다 매우 빠름
3-7. 선호도 군집
수집 및 파싱 생략(사이트 접속 불가)
단어 출현 빈도를 0과 1로 표현 -> 타니모토 계수 이용
3-8. 2차원으로 데이터 보기
다차원비례축소법 - 여러 차원의 속성들을 2차원으로 나타내기
여러 차원의 속성으로 항목간의 거리를 측정 -> 2차원으로 나타내기 위해 최적의 자리 찾기 경쟁!!!!
3-9. 군집 가능한 다른 것들
3-10. 함께 풀어보기
*사용된 라이브러리
import feedparser # rss 접속
import re # 정규식
from math import sqrt # 제곱근
from PIL import Image, ImageDraw # 그림 그리기(직선, 텍스트)
import random # the semi-open range [0.0, 1.0)
4. 검색과 랭킹
4-1. 검색엔진이란?
문서 수집->색인->랭킹으로 조회
4-2. 단순 크롤러
urllib3를 이용해서 HTML 얻기
BeautifulSoup을 이용한 HTML 파싱
특정 URL에 접속해서 HTML을 얻는다. HTML에서 단어 모음을 얻는다. 그리고 HTML내의 a태그로 URL 리스트를 만들고 접속을 반복한다.
4-3. 색인하기
sqlite3를 이용한 DB CRUD
5개 테이블을 이용한 인덱싱 기능(URL, 단어, URL-단어, 링크:URL시작-URL종료, 링크-단어)
4-4. 검색하기
1개 이상의 단어가 속한 URL을 찾기 (select sql 이용)
> 동적으로 sql 만들기(inner join)
4-5. 내용 기반 랭킹
위 방법대로 일단 검색. 그리고 여러 가중치를 부여해서 순위를 변경한다.
> 가중치 :
1.단어 빈도 : 검색어들이 가장 많이 나온 페이지를 선순위
2.문서 내 위치 : 검색어들의 페이지내 위치값들의 합이 작은 페이지를 선순위
3.단어 거리 : 2개 이상의 검색어가 있을 때, 검색어 사이의 거리(위치값)가 작은 페이지가 선순위
4.페이지랭크 : (다른 페이지에 의해) 많이 인용(링크)된 페이지를 선순위
5.링크텍스트 : 해당 URL을 링크하고 있는 페이지중에서 a태그의 텍스트가 검색어 안에 있고 경우 선순위
4-6. 유입 링크 사용하기
해당 URL페이지가 얼마나 많이 인용(링크)되었는가?
> 해당 URL페이지가 (다른 페이지에 의해서) 링크된 횟수를 이용해서 순위를 결정
페이지랭크pr 알고리즘 : 페이지의 pr 점수 / 페이지 안의 링크 총개수
> 각 페이지의 pr 점수를 일단 초기값으로 설정하고, loop를 많이 돌려서 일정한 값에 수렴되면 중단...
링크텍스트 : a태그의 텍스트가 검색어 안에 있는 경우 선순위
4-7. 클릭 학습
다음 세가지를 이용해서 인공신경망(MLP, 다중층 인식망)을 만든다.
사용자의 검색어
검색 결과 url모음
사용자가 클릭한 url
단어층-은닉층-출력층
*사용된 라이브러리
import urllib3 # HTTP 접속
from bs4 import BeautifulSoup # HTML 파싱
from urllib.parse import urljoin # 상대주소 URL을 절대주소 URL로 만들기
import sqlite3 as sqlite # 내장DB CRUD
import sys #except 에러 메시지 확인
import re # 정규식
from math import tanh # 각 노드가 입력에 반응하는 정도를 변환
'python 및 머신러닝 > 집단지성 프로그래밍' 카테고리의 다른 글
[Programming Collective Intelligence] - 집단지성 프로그래밍 5장 최적화 (1) | 2015.09.03 |
---|---|
[Programming Collective Intelligence] - 집단지성 프로그래밍 4장 7절 클릭 학습 (0) | 2015.09.02 |
[Programming Collective Intelligence] - 집단지성 프로그래밍 4장 검색과 랭킹 (0) | 2015.08.31 |
[Programming Collective Intelligence] - 집단지성 프로그래밍 3장 06 K평균 군집화 (0) | 2015.08.27 |
[Programming Collective Intelligence] - 집단지성 프로그래밍 3장 03 계층적 군집화 (0) | 2015.08.24 |