coursera의 Supervised Machine Learning: Regression and Classification 강좌 내용입니다.


비지도 학습은 출력값(output = y)가 제공되지 않는다.

예를 들면 지도학습의 예시에서는 인풋으로 종양의 크기, 나이등의 데이터와 라벨[종양이 악성인지 양성인지]을 학습 데이터로 사용했다. 비지도 학습에서는 환자의 나이와 종양의 사이즈에 대한 인풋은 주어지지만 종양이 양성인지 악성인지에 대한 라벨이 자료로 제공되지 않는다. 그렇기에 우리는 비지도 학습을 통해 환자의 나이와 종양 사이즈에 대한 그래프는 그려도 그 종양이 양성인지 악성인지는 알 수 없다. 대신 어떤 패턴이나 구조를 찾아낼 수 있다.

 

우측 그래프를 보면 데이터를 두가지 군집(clustering)으로 나눌 수 있다. 이렇게 군집으로 나누는 것이 전형적인 비지도 학습이라고 할 수있다.


clustering

 

예시1. 구글 뉴스

 구글 뉴스 관련된 뉴스끼리 묶어 보여주는 데에서 사용된다. 구글 뉴스는 상단에 해드라인이 있고 그 아래 관련된 다른 기사들이 있다. 헤드 라인에 나타난 키워드들로 알고리즘이 알아서 추측하여 클러스트링을 한 것이다.

 

예시2. DNA 데이터

각각의 행은 한 사람의 DNA  특징을 순서대로 정리한 데이터를 갖고 있다. 즉 어떤 열을 보면 여러 사람의 특정 DNA 특성(예를 들면 눈동자 색 혹은 키에 영향주는 유전자)을 알 수 있다. 

즉 아래의 Micro array은 개인의 활성화된 DNA 혹은 발현되지 않은 특정 DNA 등을 알 수 있고 각각의 데이터를 컬러로 구분해 두었다.

 

이 데이터 타입들을 통해 비지도 학습 알고리즘은 특성을 나누어 열(사람들)을 여러 타입으로 나누어 정리할 수 있다.

 

 

예시3.  AI 학습 사이트에서 고객들의 정보를 군집화할 때

 

첫번째 군집의 동기는 기술을 키우기 위한 지식을 찾고 있다, 두번째 군집은 경력을 개발하고 싶어한다. 세번째 그룹은 AI가 업데이트 되기를 기다린다.

 


비지도 학습

라벨 없이 데이터를 가져와 자동적으로 군집으로 그룹화 시키는 것

'machine_learning > [coursera] Machine learning' 카테고리의 다른 글

Jupyter Notebooks  (0) 2023.04.27
Unsupervised learning part 2  (0) 2023.04.27
Supervised learning part 2  (0) 2023.04.27
Supervised learning part 1  (0) 2023.04.27
What is machine learning?  (0) 2023.04.27

coursera의 Supervised Machine Learning: Regression and Classification 강좌 내용입니다.


즉, 지도 학습 알고리즘은 인풋과 아웃풋 혹은 (x,y)매핑을 예측하는 것을 학습한다.

예로, part1에서는 지도 학습 유형 중 하나인 regression(회귀) 알고리즘을 통해 무한한 숫자중 특정 숫자를 예측하는 것을 배웠다. 또 두번째 유형으로는 classification(분류) 알고리즘이 있다.

 

<classification 예시 : 유방암 검사>

데이터 [종양의 크기, 양성 여부[0/1]

데이터를 토대로 그린 그래프

출력은 0 혹은 1, 즉 양성 혹은 악성으로 나온다. 회귀와 달리 이번에는 두가지로만 결과가 출력된다. 

 

 

그렇기 때문에 위와 같이 그래프를 수정하면 좀 더 결과가 보기 쉬워진다. 암일 경우 종양의 크기가 크다는 걸 알 수 있다.

 

또한 암이 한종류 더 있을 때는 이런 모양의 그래프도 나올 수 있고 종양의 크기는 평균일 때 많이 나온다는 걸 알 수 있다.

 

 


Classification 예제를 통해 output 클래스 및 output 카테고리들이 종종 상호교환적으로 사용된 걸 알 수 있었다.

즉 아웃풋을 나타낼 때 클래스나 카테고리는 같은 것을 의미한다.

 

Classification 알고리즘은 범주(카테고리)를 예측한다. 또 카테고리는숫자일 수도 있으나 숫자일 필요가 없다.

작은 숫자내에서 출력값이 나온다는 점이 회귀와 다르다.


<classification 예시2 : 유방암 검사>

 

이번에는 데이터 세트에 [나이 : 종양 크기]를 가지고 있다.

데이터를 토대로 만든 그래프(o : 양성 종양, x:악성 종양)

위 그래프를 토대로 의사는 종양의 사이즈와 환자의 나이를 기록하여 해당 환자가 암일지 아닐지 예측 하려고 한다.

 

 

그러기 위해서는 저 그래프를 분리시키는 하나의 경계를 나누어야 할 것이다. 따라서 경계를 나눌 학습 알고리즘이 필요하다.

 

또 머신 러닝 문제에서는 종종 더 많은 입력값이 필요하다. 종양의 두께, 세포 모양의 균일성 등...


지도 학습

-입력 x를 출력 y로 맵핑

-주어진 정답을 통해 학습

-regression : 숫자를 예측하며 아웃풋에 무한한 가능성이 있다.

-classification : 카테고리를 예측하며, 아웃풋은 한정되어 있다.

 


Q. Supervised learning is when we give our learning algorithm the right answer y  for each example to learn from.  Which is an example of supervised learning?

1.Spam filtering.

2.Calculating the average age of a group of customers.

'machine_learning > [coursera] Machine learning' 카테고리의 다른 글

Jupyter Notebooks  (0) 2023.04.27
Unsupervised learning part 2  (0) 2023.04.27
Unsupervised learning part 1  (0) 2023.04.27
Supervised learning part 1  (0) 2023.04.27
What is machine learning?  (0) 2023.04.27

oursera의 Supervised Machine Learning: Regression and Classification 강좌 내용입니다.


지도 학습 

지도 학습은  x를 배우는 알고리즘을 사용하여 y라는 값을 나타내려고 할 때 사용한다.

고로 '맞은 정답(값)'을 학습 데이터로 사용하며, x(입력)에 맞는 y(라벨)를 연결지어 가며 기계를 학습시켜

합리적으로 정확한 예측 또는 추측을 가능하게 한다.

 

<예시>

input (X) input (Y) Application(응용 프로그램)
이메일 스팸 여부?(0/1) 스팸 필터링
오디오 문자 입력 음성 인식
영어 스페인어 머신 번역
광고, 유저 정보 클릭 여부?(0/1) 온라인 광고
이미지, 레이더 정보 다른 차의 위치 자가 주행 자동차
핸드폰 이미지 결함 여부?(0/1) 시각 검사(visual inspection)

응용 프로그램을 사용하기 위해 우리는 먼저 예제(x에 대한 올바른 답변 라벨 y)를 통해 훈련을 시킨 모델을 만들어야 한다.

 

 

훈련 후, 예제에 포함돼있지 않던 a라는 새로운 값을 인풋으로 넣고 적절한 y를 낼 수 있는지 확인 해본다.

예시로 '주택 가격 별 집의 크기'를 예측하고 싶다고 해보자. 그걸 위하여 몇 데이터를 수집했다. [집의 크기 : 집의 가격]

그러하여 위와 같은 그래프를 만들었다. 이중 한 친구가 750피트의 집의 가격을 궁금해할 때 어떻게 가격을 알아낼 수 있을까? = 지도 알고리즘을 어떻게 활용할 수 있을까?

데이터 분포를 토대로 직선과 곡선을 그려볼 수 있는데, 그러면 750피트의 집은 저 두 사이에 가격이 형성될 거라고 예측 할 수 있다. 

 

이번 예제에서는 직선/곡선 외에 다른 방법을 선택할 수도 있지만 이 예제에는 직선/곡선이 가장 체계적으로 맞았다.

이렇게 상황에 따라 맞는 알고리즘을 선택해야 한다. 알맞은 알고리즘이 더 알맞은 정답을 제공한다.


 

-이번 과정에서 사용했던 지도 학습의 알고리즘은 Regression(회귀)로 x,y 값을 통해 수많은 수 중에서 특정 숫자를 예측하는 것이다.

 

-그리고 750피트의 집이라는 인풋(x)을 넣어서 가격을 알아내는 지도 학습 문제를 classification이라고 한다ㅏ.

 

'machine_learning > [coursera] Machine learning' 카테고리의 다른 글

Jupyter Notebooks  (0) 2023.04.27
Unsupervised learning part 2  (0) 2023.04.27
Unsupervised learning part 1  (0) 2023.04.27
Supervised learning part 2  (0) 2023.04.27
What is machine learning?  (0) 2023.04.27

coursera의 Supervised Machine Learning: Regression and Classification 강좌 내용입니다.


머신 러닝의 정의

 

아서 사무엘(1959) : 명시적인 프로그래밍 없이 컴퓨터가 배울 수 있는 능력의 학문 분야 라고 정의하였다. 

그녀는 수많은 사람들의 플레이 데이터를 얻어 컴퓨터로 좋은 체커 플레이어을 만들었다. 

 

더보기

Q. If Arthur Samuel's checkers-playing program had been allowed to play only 10 games (instead of tens of thousands games) against itself, how would this have affected its performance?

 

A. Would have made it worse

 

 


 

 머신 러닝 알고리즘의 종류

 

-지도학습 

-비지도학습

-추천 시스템

-강화학습

 

이 과정에서는 지도학습과 비지도학습 알고리즘을 배우게 된다.

그리고 이 알고리즘을 사용하기 위해서는 도구가 필요하다. 그 도구와 도구를 쓰는 법에 대해서도 배우게 된다.

 

'machine_learning > [coursera] Machine learning' 카테고리의 다른 글

Jupyter Notebooks  (0) 2023.04.27
Unsupervised learning part 2  (0) 2023.04.27
Unsupervised learning part 1  (0) 2023.04.27
Supervised learning part 2  (0) 2023.04.27
Supervised learning part 1  (0) 2023.04.27

mage analysis : 사진에 무엇이 있는지 분석

<사진 임포트>

1. 필요한 모듈들 임포트

import requests          # 사진임포트 위해 리퀘스트 모듈 임포트
from io import BytesIO   # 16진수 바이트로 재조립하여 나오게하는 모듈
from PIL import Image    # 바이츠를 이미지로 출력해주는 모듈

2. 이미지 주소 붙여넣고 이미지 url 정상인지 확인,

image_URL = 'https://img.sbs.co.kr/newimg/news/20220530/201668602_1280.jpg'
#image = Image.open(BytesIO(requests.get(image_url).content))        #아래 과정들을 이 한줄로 요약 가능하다


response = requests.get(image_URL)   # 구글에서 복사한 이미지 주소, 200 나오면 정상
response.content                     # 앞에 나온 x는 텍스트가 아닌 바이너리파일이라 16진수로 표시된다, 바이트로 재조립하여 사진으로 나오게하는 작업 필요, 이때 from io in BytesIO라는 모듈 필요
img = BytesIO(response.content)      # 16진수 바이츠로 재조립함
image = Image.open(img)              # 바이츠를 이미지로 재조림
image                                # 이미지 출력

-이 과정에서 사진이 출력이 잘되어야 한다-

3. azure에서 생성한 서비스 키와 앤드포인트(주소) , 어떤 버전의 컴퓨터비전을 사용할지, 클라우드 접속에 필요한 정보를 작성

key = '5796dccc8691492e88f92758dde9b2f2'
endpoint = 'https://labuser69computervision2.cognitiveservices.azure.com/' + 'vision/v2.0/'   #azure에서 생성한 서비스 키와 앤드포인트(주소)+어떤 서비스 버전

4. 이미지 분석 기능을 쓸 거다

 
analyze_endpoint = endpoint + 'analyze'

5. 웹을 이용한 function에 필요한 3가지 속성을 변수에 넣어 정리

header = {'Ocp-Apim-Subscription-Key': key}                      #헤더에 키값을 주겠다
params = {'visualFeatures': 'Categories,Description,Color'}       # 카테고리 나누고, 설명하고 칼라값 주라는 뜻
data = {'url':image_URL}                                                   # 이미지 url

6. 클라우드에 발사!

response = requests.post(analyze_endpoint,                       
              headers=header,
              params=params,
              json=data)

7. 이제 결과를 json 파일로 저장하고나서 출력해보면 결과가 나온다

result = response.json()
result

출력>
{'categories': [],
 'color': {'dominantColorForeground': 'Grey',
  'dominantColorBackground': 'Black',
  'dominantColors': ['Grey', 'Black', 'Brown'],
  'accentColor': '4C5D2A',
  'isBwImg': False,
  'isBWImg': False},
 'description': {'tags': ['dog',
   'mammal',
   'animal',
   'sitting',
   'small',
   'grass',
   'looking',
   'cat',
   'front',
   'standing',
   'table',
   'little',
   'brown',
   'laying',
   'sheep'],
  'captions': [{'text': 'a cat sitting next to a dog',
    'confidence': 0.70557170301425}]},
 'requestId': 'b8300a15-c44f-4820-865c-204cf30dedf9',
 'metadata': {'height': 720, 'width': 1280, 'format': 'Jpeg'}}

표를 만들 x,y값 지정해주고

오차 범위도 변수로 지정해줍니다.

그후 plt.errorbar(x,y, yerr[=y축의 에러오차 범위])에 해당 값들을 넣어주면 됩니다.

여기서 fmt는 포맷으로 그래프의 선스타일과 컬러를 지정.

 

x = np.linspace(0,10,50)
dy = 0.8                      # 오차범위 = 0.8 
y = np.sin(x + np.random.randn(50))   # 조금 드쭉날쭉하게 값을 만들어볼게요

plt.errorbar(x,y, yerr = dy, fmt = '.k')                       # errorbar를 사용하면 오차를 시각화 할 수 있다.fmt = 포맷, yerr = y축에 대한 오차범위, 이사이만큼 오차가 날 수 있음을 나타낸다

 

좀 더 디자인에 신경써서 만들어보면...

 
plt.errorbar(x,y, yerr = dy, fmt='o', color='black', ecolor = 'lightgrey', elinewidth = 3)           # ecolor 에러의 컬러, elinewidth 에러바의 두께
plt.title('error chart')

+ Recent posts