Machine learning: the problem setting

일반적으로, 학습 문제는 n개의 샘플 데이터를 고려하여, 알려지지 않은 데이터의 우선순위를 예측하려는 것이다.

각 샘플이 single number에서 나아가, 다차원 entry라면, 몇 가지 속성(attribute) 혹은 특징(feature)을 가진다.

 

학습 문제는 다음과 같이 분류된다.

  • 지도 학습(supervised learning) : 데이터에 예측하려는 특징(feature)이 포함되어 있다. 주로 분류(classfication), 회귀(regression)문제가 이에 해당한다.
     -분류(classfication) : CIFAR-10 이미지 분류, 자연어 처리에서의 문장의 속성 분류,  스팸 메일 분류 등의 문제가 있다. 정답이 라벨링된 데이터로부터 라벨링되지 않은 데이터의 class를 예측하는 것이 목표이다.
     -회귀(regression) : 원하는 출력이 하나 이상의 연속 변수로 구성된 경우이다. 즉, 연속된 값을 예측하는 문제로 공부 시간과 이전 성적을 통한 현재 전공 시험 점수 예측을 예로 들 수 있겠다.
  • 비지도 학습(unsupervised learning) : unlabelled data를 통하여 예측을 해야하는 문제이다. 정답이 없는 데이터에서 잠재된 의미를 찾아야하므로 훨씬 어려운 케이스이다. 주로 클러스터링, 밀도추정, 차원축소 문제와 관련되어 있다. 
     -클러스터링 : 한글로 해석하면 군집화 정도로 이야기할 수 있다. 분류(Classfication)과 비슷한 개념인데, 클러스터 분석이란 주어진 데이터들의 특성을 고려해 데이터 집단을 정의하고 데이터 집단의 대표할 수 있는 대표점을 찾는 것으로 데이터 마이닝의 한 방법이다. 클러스터란 비슷한 특성                         을 가진 데이터들의 집단이다. 반대로 데이터의 특성이 다르면 다른 클러스터에 속해야 한다
     -밀도추정 : 관측된 데이터들의 분포로부터 주어진 변수의 확률 분포 특성을 추정하는 것
     -차원축소 : 고차원 데이터의 경우 많은 feature를 가지고 있어 데이터를 잘 나타내는 feature를 추출해내야한다. 이를 CNN에서의 pooling도 차원 축소의 한가지 예로 들 수 있다.

앞으로 진행할 프로젝트를 위한 기반지식을 쌓도록 해야겠다.

'삼성전자 인턴' 카테고리의 다른 글

Scikit-learn perceptron study  (0) 2019.09.30

Intro.

Scikit-learn의 사용법에 익숙해지기 위하여 iris 품종 분류 Perceptron 실습을 통하여 공부한 내용입니다.

Source Code.

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Perceptron
from sklearn.metrics import accuracy_score
import numpy as np
import matplotlib.pyplot as plt

if __name__ == '__main__':
iris = datasets.load_iris() #iris에 대한 데이터를 불러온다.
print(iris)
X = iris.data # 0 : 꽃받침 길이 / 1 : 꽃받침 너비 / 2 : 꽃잎 길이 / 3 : 꽃잎 너비
y = iris.target #출력해보면 0,1,2로만 출력이 되는데 iris_setosa, iris-versicolor, iris_verginica에 해당하는 값으로 이미 숫자로 바꾸어 져있음.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) #random_state : random_seed값을 줌으로써 train/test split이 고정됨, test_size 값을 통해 학습데이터와 테스트 데이터 비율을 나눔


sc = StandardScaler() #스케일링 : 전체 자료의 분포를 평균 0 표준편차 1이 되도록 변환
sc.fit(X_train) #X_train의 평균과 표준편차를 구한다.
X_train_std = sc.transform(X_train) #학습용 데이터를 입력으로 하여 transform 실행시 학습용 데이터를 표준화한다.
X_test_std = sc.transform(X_test) #마찬가지로 테스트 데이터 표준화

ml = Perceptron(n_iter_no_change=40, eta0=0.1, random_state=0)#eta0 : learning rate, n_iter : epochs over data
ml.fit(X_train_std, y_train)
y_pred = ml.predict(X_test_std)
print("총 테스트 개수:%d, 오류개수:%d" %(len(y_test), (y_test != y_pred).sum()))
print("정확도: %.2f" %accuracy_score(y_test, y_pred)) #accuracy_score() : y_test y_pred를 비교하여 정확도를 계산해줌
#iris의 모든 데이터를 X로 두고 사용했을 때 93%의 정확도 (test_size = 0.3) // (test_size = 0.2 , acc = 1.00(..? overfitting?) test size 0.1, acc = 0.93)
#iris 2,3 정보만 사용했을 때 91%(test_size = 0.3)
#test_size = 0.2 일 때를 왜 1.00이 나오는지 분석해보자

Result.

 

http://blog.naver.com/PostView.nhn?blogId=samsjang&logNo=220965998073&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView 옥수별 님의 블로그 외 scikit-learn document를  참고하여 공부하였습니다.

module과 parameter 같은 경우 scikit-learn 버전이 바뀌면서 예전 자료 공부시 에러가 발생했습니다.

특히 from sklearn.model_selection import train_test_split, 부분과 Perceptron의 parameter 인n_iter_no_change 같은 경우 sklearn.model_selection으로 고치기 이전에 기존에는 sklearn.cross_validation 이었으나 그대로 작성 시 오류가 발생함을 확인하였습니다. 찾아보니 train_test_split이라는 함수가 model_selection의 하위로 들어갔다고 합니다.

또 기존 코드에서는 Perceptron 부분에서 n_iter와 같이 사용되는데, scikit-learn document를 보면 n_iter가 없는 것을 볼 수 있습니다. 본인의 버전에 맞는 document를 참고하는 것이 중요하다는 교훈도 다시 한 번 얻어갑니다 :)

 

'삼성전자 인턴' 카테고리의 다른 글

An introduction to machine learning with a scikit-learn  (0) 2019.09.30

아주 얼떨결에 6학기를 다니지 않고 인턴으로 15학점(전공6+교양9)을 인정받으면서 삼성에서 일하게 되었습니다..

 

하계/동계 인턴과의 가장 큰 차이점은 6주동안 진행되는 하계/동계 인턴과는 다르게 우선 16주라는 짧다면 짧고 길다면 긴 동안 일을 한다는 사실이고,

채용전환형은 아니라는 점이죠..ㅠㅠ

 

그래도 긴 시간동안 일하는 만큼 배우는 것도 많고 어깨너머로 들리는 말들도 많이 도움이 될 것 같습니다.

 

9.2 월요일에 처음 들어오고 21명의 학생들이 다같이 교육을 받고 기숙사 입주 인원들은 기숙사 교육이수 후 기숙사에 입주하게 되며 하루를 마무리 했습니다.

 

둘째날에는 인사팀 쪽에서 대기하고 배치된 부서의 인사쪽에서 데리러 올 때까지 기다리는 과정이 있었고,

 

사실 아직 홍보가 잘 되지 않은 제도라 그런지 부서 배치 후 다들 얼떨떨해 하시는 분위기였습니다.

 

그래도 지난 학기 학생들의 후기를 보니 다들 좋은 경험과 프로젝트를 진행하고 수료한 것 같았습니다.ㅎㅎ

 

저는 삼성전자 DS부문 기흥/화성/평택단지총괄 스마트IT팀의 여러 그룹중 설비/인프라IT그룹으로 들어갔습니다.

우선 엄청난 팀 규모에 놀랐고,, 결과적으로 생성되는 매우 작은 nm단위의 반도체를 제조하기 위해 이렇게 많은 인원들이 아주 체계적으로 일을하고 있다는 사실에 두 번 놀랐고, 엄청난 보안 관리에 세 번 놀랐습니다 ㄷㄷ.. 사스가 삼성

 

아직 1주차라 진짜진짜 엄청엄청 매우매우 맛있는 사내 식당에서 밥을 먹고 선배님들과 이야기를 하며 퇴근 후에는 기숙사 동기들과 시간을 보내느라 정신없이 흘러갔습니당ㅋㅋ

 

다음 주도 사실 추석이라 월화수만 출근이고 혼자 공부를 하거나 환경 세팅 정도만 하고 3주차쯤부터 정확히 어떤 프로젝트를 진행하게 될 지 정해질 것 같네요.

 

아침형 인간이 아니라 매일 6시에 눈뜨는게 제일 힘들었고, 한 달 정도 지나면 익숙해 지겠죠ㅠㅠ

 

별로 할 줄 아는게 없어서 걱정이긴한데,,

 

암튼 1주차 후기 끝!

 

 

 

 

+ Recent posts