자바 개발자를위한 기계 학습, Part 1 : 기계 학습을위한 알고리즘

자율 주행 자동차, 얼굴 인식 소프트웨어 및 음성 제어 스피커는 모두 기계 학습 기술과 프레임 워크를 기반으로하며, 이는 첫 번째 물결에 불과합니다. 향후 10 년 동안 새로운 세대의 제품은 우리가 만들고 사용하는 소프트웨어 개발과 응용 프로그램 및 제품에 대한 새로운 접근 방식을 시작하여 세상을 변화시킬 것입니다.

Java 개발자는 특히 기술 회사가 기계 학습에 진지하게 투자하기 시작했기 때문에이 곡선에서 앞서 나가기를 원합니다. 오늘 배운 내용은 향후 5 년에 걸쳐 구축 할 수 있지만 어딘가에서 시작해야합니다.

이 기사는 당신을 시작할 것입니다. 기계 학습이 작동하는 방식에 대한 첫인상으로 시작하고 기계 학습 알고리즘을 구현하고 훈련하는 방법에 대한 짧은 가이드가 이어집니다. 학습 알고리즘의 내부와 가장 적합한 예측 기능을 학습, 점수화 및 선택하는 데 사용할 수있는 기능을 연구 한 후 JVM 프레임 워크 인 Weka를 사용하여 기계 학습 솔루션을 구축하는 방법에 대한 개요를 얻을 수 있습니다. 이 기사는 지능형 애플리케이션을 개발하는 가장 일반적인 접근 방식 인 감독 형 기계 학습에 중점을 둡니다.

자바 개발자를위한 기계 학습, 2 부

다음 단계에 대한 준비가 되셨습니까? 이 자습서의 후반부는 기계 학습 데이터 파이프 라인을 개발하고 배포하는 방법을 보여줍니다.

기계 학습 및 인공 지능

기계 학습은 인간의 지능을 모방 할 수있는 기계를 생산하려는 인공 지능 분야에서 진화했습니다. 머신 러닝은 컴퓨터 과학의 새로운 추세이지만 인공 지능은 새로운 과학 분야가 아닙니다. 1950 년대 초 Alan Turing이 개발 한 Turing 테스트는 컴퓨터가 실제 지능을 가질 수 있는지 여부를 결정하기 위해 만들어진 최초의 테스트 중 하나입니다. 튜링 테스트에 따르면 컴퓨터는 인간이 인간이라고 믿도록 속임으로써 인간의 지능을 증명할 수 있다고합니다.

많은 최첨단 기계 학습 접근 방식은 수십 년 된 개념을 기반으로합니다. 지난 10 년 동안 변화 한 것은 컴퓨터 (및 분산 컴퓨팅 플랫폼)가 이제 기계 학습 알고리즘에 필요한 처리 능력을 갖추고 있다는 것입니다. 대부분의 기계 학습 알고리즘은 처리하기 위해 엄청난 수의 행렬 곱셈 및 기타 수학적 연산을 요구합니다. 이러한 계산을 관리하는 계산 기술은 20 년 전에도 존재하지 않았지만 지금은 존재합니다.

기계 학습을 통해 프로그램은 사람의 개입없이 품질 개선 프로세스를 실행하고 기능을 확장 할 수 있습니다. 기계 학습으로 빌드 된 프로그램은 자체 코드를 업데이트하거나 확장 할 수 있습니다.

지도 학습 대 비지도 학습

지도 학습 및 비지도 학습은 기계 학습에 대한 가장 인기있는 접근 방식입니다. 둘 다 상호 연관시키고 학습하기 위해 엄청난 양의 데이터 레코드를 기계에 공급해야합니다. 이러한 수집 된 데이터 기록을 일반적으로 특징 벡터라고합니다. 개별 주택의 경우 특성 벡터는 전체 주택 크기, 방 수 및 주택 연령과 같은 특성으로 구성 될 수 있습니다.

에서 지도 학습 , 기계 학습 알고리즘이 특징 벡터에 관한 질문에 제대로 응답하도록 훈련된다. 알고리즘을 훈련하기 위해 기계에는 일련의 특징 벡터와 관련 레이블이 제공됩니다. 레이블은 일반적으로 사람 어노 테이터가 제공하며 주어진 질문에 대한 올바른 "답변"을 나타냅니다. 학습 알고리즘은 특징 벡터와 정확한 레이블을 분석하여 내부 구조와 이들 간의 관계를 찾습니다. 따라서 기계는 쿼리에 올바르게 응답하는 방법을 학습합니다.

예를 들어, 지능형 부동산 애플리케이션은 다양한 주택의 크기, 방 수 및 각 연령을 포함하는 특징 벡터로 훈련 될 수 있습니다. 인간 라벨러는 이러한 요소를 기반으로 각 주택에 정확한 주택 가격을 표시합니다. 이 데이터를 분석함으로써 부동산 애플리케이션은 " 이 집을 위해 얼마나 많은 돈을 벌 수 있습니까? "라는 질문에 답하도록 훈련 될 것 입니다.

훈련 프로세스가 끝나면 새 입력 데이터에 레이블이 지정되지 않습니다. 기계는 보이지 않고 레이블이없는 특징 벡터에 대해서도 쿼리에 올바르게 응답 할 수 있습니다.

에서 자율 학습 알고리즘은 인간의 라벨, 또는 질문없이 답변을 예측하는 프로그램된다. 비지도 학습은 레이블이나 결과를 미리 결정하는 대신 방대한 데이터 세트와 처리 능력을 활용하여 이전에 알려지지 않은 상관 관계를 발견합니다. 예를 들어, 소비자 제품 마케팅에서 비지도 학습은 숨겨진 관계 나 소비자 그룹을 식별하는 데 사용될 수 있으며 결국 새롭거나 향상된 마케팅 전략으로 이어질 수 있습니다.

이 기사는 오늘날 머신 러닝에 대한 가장 일반적인 접근 방식 인지도 머신 러닝에 중점을 둡니다.

감독되는 기계 학습

모든 기계 학습은 데이터를 기반으로합니다. 감독되는 기계 학습 프로젝트의 경우 원하는 결과에 대해 의미있는 방식으로 데이터에 레이블을 지정해야합니다. 표 1에서 주택 레코드의 각 행에는 "집 가격"에 대한 레이블이 포함되어 있습니다. 행 데이터를 주택 가격 레이블과 연관시킴으로써 알고리즘은 결국 데이터 세트에없는 주택의 시장 가격을 예측할 수 있습니다 (주택 크기는 평방 미터를 기반으로하고 주택 가격은 유로를 기반으로 함).

표 1. 주택 기록

특색 특색 특색 상표
집의 크기 객실 수 집의 나이 집의 예상 비용
90m2 / 295 피트 방 2 개 23 년 249,000 유로
101m2 / 331 피트 방 3 개 해당 사항 없음 338,000 유로
1330m2 / 4363 피트 11 실 12 년 6,500,000 유로

초기 단계에서는 손으로 데이터 레코드에 레이블을 지정할 수 있지만 결국에는이 프로세스를 자동화하도록 프로그램을 교육 할 수 있습니다. 전자 메일 응용 프로그램에서 이것을 보았을 것입니다. 전자 메일을 스팸 폴더로 이동하면 "이 스팸입니까?"라는 쿼리가 발생합니다. 응답 할 때보고 싶지 않은 메일을 인식하도록 프로그램을 교육하는 것입니다. 애플리케이션의 스팸 필터는 동일한 소스 또는 유사한 콘텐츠를 포함하는 향후 메일에 레이블을 지정하고 폐기하는 방법을 학습합니다.

레이블이 지정된 데이터 세트는 교육 및 테스트 목적으로 만 필요합니다. 이 단계가 끝나면 기계 학습 알고리즘이 레이블이없는 데이터 인스턴스에서 작동합니다. 예를 들어 예측 알고리즘에 레이블이 지정되지 않은 새 주택 레코드를 제공하면 훈련 데이터를 기반으로 예상 주택 가격을 자동으로 예측할 수 있습니다.

기계가 예측을 배우는 방법

지도 머신 러닝의 과제는 특정 질문에 대한 적절한 예측 기능을 찾는 것입니다. 수학적으로 문제는 입력 변수 x 를 가져와 예측 값 y를 반환하는 입력-출력 함수를 찾는 것 입니다. 이 가설 함수 (h θ )는 훈련 과정의 출력입니다. 종종 가설 함수는 목표 또는 예측 함수 라고도 합니다.

그레고르 로스

In most cases, x represents a multiple-data point. In our example, this could be a two-dimensional data point of an individual house defined by the house-size value and the number-of-rooms value. The array of these values is referred to as the feature vector. Given a concrete target function, the function can be used to make a prediction for each feature vector x. To predict the price of an individual house, you could call the target function by using the feature vector { 101.0, 3.0 } containing the house size and the number of rooms:

 // target function h (which is the output of the learn process) Function h = ...; // set the feature vector with house size=101 and number-of-rooms=3 Double[] x = new Double[] { 101.0, 3.0 }; // and predicted the house price (label) double y = h.apply(x); 

목록 1에서 배열 변수 x 값은 집의 특징 벡터를 나타냅니다. y를 목표 함수에 의해 리턴 값은 예측 집값이다.

기계 학습의 과제는 알려지지 않은 보이지 않는 데이터 인스턴스에 대해 가능한 한 정확하게 작동하는 대상 함수를 정의하는 것입니다. 기계 학습에서 목표 함수 (h θ )는 때때로 모델 이라고합니다 . 이 모델은 학습 과정의 결과입니다.

그레고르 로스

레이블이 지정된 학습 예제를 기반으로 학습 알고리즘은 학습 데이터에서 구조 또는 패턴을 찾습니다. 이로부터 데이터를 잘 일반화하는 모델을 생성합니다.

Typically, the learning process is explorative. In most cases, the process will be performed multiple times by using different variations of learning algorithms and configurations.

Eventually, all the models will be evaluated based on performance metrics, and the best one will be selected. That model will then be used to compute predictions for future unlabeled data instances.

Linear regression

기계가 사고하도록 훈련시키기위한 첫 번째 단계는 사용할 학습 알고리즘을 선택하는 것입니다. 선형 회귀 는 가장 간단하고 가장 인기있는지도 학습 알고리즘 중 하나입니다. 이 알고리즘은 입력 특성과 출력 된 레이블 간의 관계가 선형이라고 가정합니다. 아래의 일반 선형 회귀 함수는 특징 벡터 의 각 요소에 세타 매개 변수 (θ)를 곱하여 예측 값을 반환합니다 . 세타 매개 변수는 학습 데이터를 기반으로 회귀 함수를 조정하거나 "조정"하기 위해 학습 프로세스 내에서 사용됩니다.

그레고르 로스

In the linear regression function, theta parameters and feature parameters are enumerated by a subscription number. The subscription number indicates the position of theta parameters (θ) and feature parameters (x) within the vector. Note that feature x0 is a constant offset term set with the value 1 for computational purposes. As a result, the index of a domain-specific feature such as house-size will start with x1. As an example, if x1 is set for the first value of the House feature vector, house size, then x2 will be set for the next value, number-of-rooms, and so forth.

Listing 2 shows a Java implementation of this linear regression function, shown mathematically as hθ(x). For simplicity, the calculation is done using the data type double. Within the apply() method, it is expected that the first element of the array has been set with a value of 1.0 outside of this function.

Listing 2. Linear regression in Java

 public class LinearRegressionFunction implements Function { private final double[] thetaVector; LinearRegressionFunction(double[] thetaVector) { this.thetaVector = Arrays.copyOf(thetaVector, thetaVector.length); } public Double apply(Double[] featureVector) { // for computational reasons the first element has to be 1.0 assert featureVector[0] == 1.0; // simple, sequential implementation double prediction = 0; for (int j = 0; j < thetaVector.length; j++) { prediction += thetaVector[j] * featureVector[j]; } return prediction; } public double[] getThetas() { return Arrays.copyOf(thetaVector, thetaVector.length); } } 

In order to create a new instance of the LinearRegressionFunction, you must set the theta parameter. The theta parameter, or vector, is used to adapt the generic regression function to the underlying training data. The program's theta parameters will be tuned during the learning process, based on training examples. The quality of the trained target function can only be as good as the quality of the given training data.

아래 예에서는 LinearRegressionFunction집 크기에 따라 집 가격을 예측하기 위해 인스턴스화됩니다. x 0 이 1.0의 상수 값이어야 한다는 점을 고려 하면 대상 함수는 두 개의 세타 매개 변수를 사용하여 인스턴스화됩니다. 세타 매개 변수는 학습 프로세스의 출력입니다. 새 인스턴스를 생성 한 후 1330 평방 미터 크기의 주택 가격은 다음과 같이 예측됩니다.

 // the theta vector used here was output of a train process double[] thetaVector = new double[] { 1.004579, 5.286822 }; LinearRegressionFunction targetFunction = new LinearRegressionFunction(thetaVector); // create the feature vector function with x0=1 (for computational reasons) and x1=house-size Double[] featureVector = new Double[] { 1.0, 1330.0 }; // make the prediction double predictedPrice = targetFunction.apply(featureVector); 

대상 함수의 예측 선은 아래 차트에서 파란색 선으로 표시됩니다. 선은 모든 집 크기 값에 대해 대상 함수를 실행하여 계산되었습니다. 차트에는 교육에 사용되는 가격 크기 쌍도 포함됩니다.

그레고르 로스

지금까지 예측 그래프가 충분히 잘 맞는 것 같습니다. 그래프 좌표 (절편 및 기울기)는 theta 벡터로 정의됩니다 { 1.004579, 5.286822 }. 하지만이 세타 벡터가 애플리케이션에 가장 적합하다는 것을 어떻게 알 수 있습니까? 첫 번째 또는 두 번째 세타 매개 변수를 변경하면 함수가 더 잘 맞을까요? 가장 적합한 세타 매개 변수 벡터를 식별하려면 대상 함수의 성능을 평가하는 유틸리티 함수 가 필요 합니다.

목표 함수 채점

기계 학습에서 비용 함수 (J (θ))는 주어진 목표 함수의 평균 오류 또는 "비용"을 계산하는 데 사용됩니다.

그레고르 로스