Artificial Intelligence

PageRank란? PageRank는 하이퍼링크 구조를 가지는 문서에 상대적 중요도에 따라 가중치를 부여하는 방법이다. PageRank Algorithm은 더 중요한 페이지가 더 많은 사이트로부터 링크를 받는다는 것에 비롯되었는데, 만약에 page A, B, C, D 가 있을 때 page A에서 원하는 결과를 찾지 못해서 page B로 방문했을 경우 page B는 임의의 확률 x 1/3 만큼의 pagerank를 받게 된다. 이렇게 PageRank 값을 page 간에 주고받는 것을 반복하다 보면, 전체 웹 페이지가 특정한 PageRank값에 수렴하는데, 이를 통해 최종 PageRank값을 계산할 수 있다. 식으로 나타내면, 초기 PageRank r 을 설정하고, 인접 행렬(각 page 간 방문 빈도) L을..
이번엔 eigen vector와 eigen value에 대해 알아보려 한다. eigen vector란? eigenvector란 우리말로 고유 벡터라고 하는데, 선형 변환(transform)이 일어난 후에도 방향이 변하지 않는 영 벡터가 아닌 벡터이다. eigen value란? eigenvalue는 우리말로 고윳값이라 하며, eigenvector의 길이가 변하는 배수를 선형 변환의 그 eigenvector에 대응하는 eigenvalue라고 부른다. 여기서 주의할 점은 길이가 변하는 것이지 방향의 변화는 없다는 것이다. 이 둘을 식으로 나타내자면, matrix A에 대하여, Ax = λx (lambda는 상수)가 성립하는 0이 아닌 x vector가 존재할 때 λ를 matrix A의 eigenvalue, x..
오늘은 PIL(Python Image Library) 모듈을 사용하여 python에서 이미지를 다루어 보려고 한다. 1. 이미지 불러오기 먼저 이미지 파일(. png,. jpeg 등)이 필요한데, 나는 병아리 이미지(png 파일)를 가져왔다. 이 이미지의 크기는 256x128 이며 보통 [너비, 높이] 순서이다. 그럼 이제 python에서 이미지를 가져와보자. 1 2 3 4 from PIL import Image image = Image.open("img.png") image.show() 위 코드를 입력하고 실행하면 위와같은 사진이 열린다. 잘 불러왔다는것을 알 수 있다. 2. 이미지 array 변환 그럼 이 사진을 array로 바꿔보자. numpy.asarray 함수로 이미지를 array로 바꿀 수 있..
오늘은 그람 슈미트 직교화와 반사 행렬에 대해 알아보자. 1. gram-schmidt 직교화우선 gram-schmidt 직교화의 의미를 위키백과에 검색해보면"내적 공간에서 유한 개의 일차 독립 벡터 집합을 정규 직교 기저로 변환하는 방법이다"라 한다.(출처 : https://ko.wikipedia.org/wiki/%EA%B7%B8%EB%9E%8C-%EC%8A%88%EB%AF%B8%ED%8A%B8_%EA%B3%BC%EC%A0%95) 의미를 조금 해석해보자면,1) 일차독립 벡터 집합은 벡터 집합 내의 모든 벡터들이남은 다른 벡터들의 일차 결합으로 나타낼 수 없는 벡터들의 집합을 의미하는데 여기서 일차 결합이란, 벡터들과의 사칙연산을 말한다. 따라서 예를 들어 v = [[1,0,0], [0,1,0], [0,0..
저번 시간에는 행렬 간의 기본적인 연산과 인덱싱에 대해 알아보았었다. 따라서 이번에는 저번 시간에 배운 기본적인 연산을 이용해 행렬 변환과 행렬식을 구하는 방법에 대해 글을 써보려 한다. 1. vector를 가지고 행렬 transformation 하기 임의의 벡터 x를 가지고 어떤 행렬 A에 대해 transformation을 하는 방법은 간단하다. 단, 벡터와 행렬의 공간이 맞아야 한다. (벡터 공간의 수와 행렬의 행) 예시를 보자 3 x 3 행렬 A에 대해 (1,2,3)으로 정의된 vector x의 transformation을 나타내려면 행렬 A의 각 행에 대해서 vector를 내적 하면 된다. 하지만 좀 보기 불편해 보인다. 사실 transformation을 하는데에 따로 함수를 정의할 필요는 없다...
우선 이번 주차 설명에 앞서서.. 학교 강의에서 나오는 실습 예제나 stack overflow나 다른 사람들의 numpy 코드를 보면 for loop, 즉 반복문을 numpy에선 잘 쓰지 않는다. 심지어 실습 문제에는 그냥 대놓고 for문 쓰지 말 것~이라고 주어지길래 왜 그런건지 찾아보니 for loop를 쓰면 numpy 함수를 쓴 것보다 속도가 상당히 느리다. 그래서 얼마나 느린 건지 직접 검증해보았다. numpy.arange를 통해 리스트를 만든 경우 0~999999 배열을 만드는 데에 6.49ms 가 걸렸다. for loop 를 통해 리스트를 만든 경우 동일한 크기의 배열을 만드는 데에 398ms 가 걸렸다. 실험 결과 약 50배가량의 시간 차이가 나버리는 것을 볼 수 있는데, 왜 그런것인지는 n..
어제 numpy를 처음 보고, 몇몇 함수들을 찾아보니 vector, matrix 관련한 식을 계산하는데 정말 유용하고 말도안되는 함수들이라서 깜짝 놀랐다. 그래서 까먹지 않기 위해 몇 가지 골라서 정리를 해본다. 1. 기초 함수들 아래 함수들은 "import numpy as py"가 위에 쓰여있다고 가정하고, 작성했습니다! np.array(arr) : 인자로 들어오는 "[]" 모양 리스트를 vector space로 만들어준다. 인자로 리스트를 직접 만들어줘도 되고, 리스트 변수를 인자에 넣어줘도 된다. np.full(arr_size, value) : 배열의 크기(arr_size)만큼 값(value)을 꽉 채워 넣어준다. arr_size에 들어가는 값이 다차원 배열이어도 된다. np.zeros(size),..