[php machine learning] PHP-ML을 이용한 분류
2020.02.06 20:45
[php machine learning] PHP-ML을 이용한 분류
기계 학습에서의 분류는 새로운 관찰이 속한 범주 집합을 식별하는 문제입니다. 분류는 Supervised Machine Learning
의 범주에 속합니다.
분류를 구현하는 모든 알고리즘은 분류로 알려져있다
PHP-ML에서 지원되는 분류 기준은
- SVC (지원 벡터 분류)
- k- 가장 가까운 이웃
- 나이브 베이 즈
train
와 predict
방법은 모든 분류 기준에서 동일합니다. 유일한 차이점은 사용 된 기본 알고리즘에 있습니다.
SVC (지원 벡터 분류)
새로운 관측을 예측하기 전에 먼저 분류자를 훈련해야합니다. 다음 코드를 고려하십시오.
// Import library
use Phpml\Classification\SVC;
use Phpml\SupportVectorMachine\Kernel;
// Data for training classifier
$samples = [[1, 3], [1, 4], [2, 4], [3, 1], [4, 1], [4, 2]]; // Training samples
$labels = ['a', 'a', 'a', 'b', 'b', 'b'];
// Initialize the classifier
$classifier = new SVC(Kernel::LINEAR, $cost = 1000);
// Train the classifier
$classifier->train($samples, $labels);
코드는 꽤 간단합니다. 위에 사용 된 $cost
은 각 교육 사례를 잘못 분류하는 것을 피하기 위해 얼마나 많이 사용했는지 측정 한 것입니다. 의 작은 값의 경우 $cost
이 잘못 분류 된 사례를 얻을 수 있습니다. 기본적으로 1.0 으로 설정됩니다.
이제 분류자를 훈련 받았으므로 실제 예측을 시작할 수 있습니다. 예측에 대해 다음과 같은 코드를 고려하십시오.
$classifier->predict([3, 2]); // return 'b'
$classifier->predict([[3, 2], [1, 5]]); // return ['b', 'a']
위의 경우에 분류기는 분류되지 않은 샘플을 가져 와서 레이블을 예측할 수 있습니다. predict
메소드는 샘플의 배열뿐만 아니라 단일 샘플을 취할 수 있습니다.
k- 가장 가까운 이웃
이 알고리즘의 classfier는 두 개의 매개 변수를 취하며 다음과 같이 초기화 될 수 있습니다.
$classifier = new KNearestNeighbors($neighbor_num=4);
$classifier = new KNearestNeighbors($neighbor_num=3, new Minkowski($lambda=4));
$neighbor_num
은 knn 알고리즘에서 스캔 할 가장 가까운 이웃 수이고 두 번째 매개 변수는 기본적으로 첫 번째 경우 Euclidean
거리 메트릭입니다. Minkowski에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
다음은이 분류 기준을 사용하는 방법에 대한 간단한 예입니다.
// Training data
$samples = [[1, 3], [1, 4], [2, 4], [3, 1], [4, 1], [4, 2]];
$labels = ['a', 'a', 'a', 'b', 'b', 'b'];
// Initialize classifier
$classifier = new KNearestNeighbors();
// Train classifier
$classifier->train($samples, $labels);
// Make predictions
$classifier->predict([3, 2]); // return 'b'
$classifier->predict([[3, 2], [1, 5]]); // return ['b', 'a']
NaiveBayes 분류기
NaiveBayes Classifier
는 Bayes' theorem
기반으로하며 생성자에서 매개 변수가 필요하지 않습니다.
다음 코드는 간단한 예측 구현을 보여줍니다.
// Training data
$samples = [[5, 1, 1], [1, 5, 1], [1, 1, 5]];
$labels = ['a', 'b', 'c'];
// Initialize classifier
$classifier = new NaiveBayes();
// Train classifier
$classifier->train($samples, $labels);
// Make predictions
$classifier->predict([3, 1, 1]); // return 'a'
$classifier->predict([[3, 1, 1], [1, 4, 1]); // return ['a', 'b']
지금까지는 모든 경우에 정수 배열 만 사용했지만 실생활에서는 그렇지 않습니다. 그러므로 분류 자 사용 방법에 대한 실제적인 상황을 설명하려고 노력하겠습니다.
자연에 꽃의 특성을 저장하는 응용 프로그램이 있다고 가정 해보십시오. 단순화를 위해 꽃잎의 색깔과 길이를 고려할 수 있습니다. 그래서 우리의 데이터를 훈련시키는 데 두 가지 특성이 사용됩니다.
color
은 각각에 int 값을 할당 할 수있는 더 간단한 방법이며 길이는(0 mm,10 mm)=1 , (10 mm,20 mm)=2
와 같은 범위를 가질 수 있습니다. 초기 데이터는 분류자를 훈련시킵니다. 이제 사용자 요구 중 하나는 뒷마당에서 자라는 꽃의 종류를 식별합니다. 그가하는 일은 꽃의color
을 선택하고 꽃잎의 길이를 더하는 것입니다. 분류기를 실행하면 꽃의 유형을 감지 할 수 있습니다 ( '위의 라벨'참조).
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.