PHP 머 신 러 닝 라 이브 러 리 php-ml 의 간단 한 테스트 및 사용 방법

php-ml 는 PHP 로 작 성 된 머 신 러 닝 라 이브 러 리 입 니 다.비록 우 리 는 python 이나 C++가 더 많은 기계 학습 라 이브 러 리 를 제공 한 다 는 것 을 알 고 있 지만,실제로 그들 은 대부분 약간 복잡 하고 배치 하기 때문에 많은 초보 자 들 을 절망 하 게 한다.
pp-ml 이 기계 학습 라 이브 러 리 는 특별히 높 은 알고리즘 이 없 지만 가장 기본 적 인 기계 학습,분류 등 알고리즘 을 가지 고 있 습 니 다.우리 작은 회 사 는 간단 한 데이터 분석,예측 등 을 하 는 것 이 모두 충분 합 니 다.우리 의 프로젝트 에서 추구 하 는 것 은 지나친 효율 과 정밀도 가 아니 라 성 가 비 를 추구 해 야 한다.일부 알고리즘 과 라 이브 러 리 는 매우 강해 보이 지만 우리 가 빠 른 접속 을 고려 하고 우리 기술자 들 이 기계 학습 분야 의 경험 이 없다 면 복잡 한 코드 와 배치 가 오히려 우리 의 프로젝트 를 끌 어 들일 것 이다.만약 에 우리 자체 가 간단 한 기계 학습 응용 을 하 는 것 이 라면 복잡 한 라 이브 러 리 와 알고리즘 을 연구 하 는 학습 원가 가 현저히 높 을 것 이다.그리고 프로젝트 에 기괴 한 문제 가 발생 하면 우 리 는 해결 할 수 있 을 까?수요 가 바 뀌 면 어 떡 하지?모두 가 이런 경험 을 한 적 이 있다 고 믿 습 니 다.하 다가 프로그램 이 갑자기 잘못 되 었 습 니 다.자신 은 아무리 해도 원인 을 잘 모 르 고 구 글 이나 바 이 두 를 찾 아 보면 조건 을 만족 시 키 는 문제 만 찾 아 5 년,10 년 전에 질문 을 한 다음 에 제로 답 을 합 니 다.
따라서 가장 간단 하고 효율 적 이 며 성 비가 가장 높 은 방법 을 선택 하 는 것 이 필수 적 이다.pp-ml 의 속 도 는 느 린 편 이 아 닙 니 다.(빨리 phop 7 로 바 꾸 세 요)그리고 정밀도 도 좋 습 니 다.알고리즘 도 똑 같 고 phop 은 c 를 기반 으로 합 니 다.블 로 거들 이 가장 눈 에 거 슬 리 는 것 은 python 과 자바,PHP 간 의 성능 비교,적용 범위 비교 다.정말 성능 이 라면 C 로 개발 해 주세요.정말 적용 범 위 를 추구 하려 면 C,심지어 어 셈 블 리 를 사용 하 세 요...
우선,우 리 는 이 라 이브 러 리 를 사용 하려 면 먼저 이 라 이브 러 리 를 다운로드 해 야 한다.github 에서 이 라 이브 러 리 파일 을 다운로드 할 수 있 습 니 다(https://github.com/php-ai/php-ml)。물론 이 라 이브 러 리 를 다운로드 하려 면 coposer 를 사용 하 는 것 을 추천 합 니 다.자동 으로 설정 합 니 다.
다운로드 가 끝 난 후에 우 리 는 이 라 이브 러 리 의 문 서 를 볼 수 있 습 니 다.문 서 는 모두 간단 한 예시 입 니 다.우 리 는 스스로 파일 을 만들어 서 시도 해 볼 수 있 습 니 다.알 기 쉽다.다음은 실제 데 이 터 를 가지 고 테스트 해 보 자.데이터 세트 하 나 는 Iris 꽃술 의 데이터 세트 이 고 다른 하 나 는 기록 을 잃 어 버 려 서 무슨 데이터 인지 모 르 겠 어 요...
Iris 꽃술 부분 데 이 터 는 세 가지 서로 다른 분류 가 있 습 니 다.

이름 모 를 데이터 세트,소수점 이 쉼표 로 맞 았 기 때문에 계산 할 때 처리 해 야 합 니 다.

이름 모 를 데이터 세트 부터 처리 하 겠 습 니 다.우선,이름 모 를 데이터 세트 의 파일 이름 은 data.txt 입 니 다.이 데이터 세트 는 x-y 접 는 선 그림 을 먼저 그 릴 수 있 습 니 다.그래서 우 리 는 먼저 원 데 이 터 를 접 는 그림 으로 그 렸 다.x 축 이 비교적 길 기 때문에 우 리 는 그것 의 대체적인 모양 만 잘 보면 된다.

php 를 사용 한 jpgraph 라 이브 러 리 를 그립 니 다.코드 는 다음 과 같 습 니 다.

<?php
include_once './src/jpgraph.php';
include_once './src/jpgraph_line.php';

$g = new Graph(1920,1080);//jpgraph     
$g->SetScale("textint");
$g->title->Set('data');

//     
$file = fopen('data.txt','r');
$labels = array();
while(!feof($file)){
 $data = explode(' ',fgets($file));  
 $data[1] = str_replace(',','.',$data[1]);//    ,             
 $labels[(int)$data[0]] = (float)$data[1];//               ,          
} 

ksort($labels);//       

$x = array();//x      
$y = array();//y      
foreach($labels as $key=>$value){
 array_push($x,$key);
 array_push($y,$value);
}


$linePlot = new LinePlot($y);
$g->xaxis->SetTickLabels($x); 
$linePlot->SetLegend('data');
$g->Add($linePlot);
$g->Stroke();
이 원 도 를 비교 해서 우 리 는 이어서 공 부 를 진행 할 것 이다.우 리 는 php-ml 중의 LeastSquars 를 이용 하여 학습 을 진행한다.우리 가 테스트 한 출력 은 파일 에 저장 해 야 하기 때문에 우리 가 대비 도 를 그 릴 수 있 도록 해 야 한다.학습 코드 는 다음 과 같 습 니 다:

<?php
 require 'vendor/autoload.php';

 use Phpml\Regression\LeastSquares;
 use Phpml\ModelManager;

 $file = fopen('data.txt','r');
 $samples = array();
 $labels = array();
 $i = 0;
 while(!feof($file)){
  $data = explode(' ',fgets($file));
  $samples[$i][0] = (int)$data[0];
  $data[1] = str_replace(',','.',$data[1]);
  $labels[$i] = (float)$data[1];
  $i ++;
 } 
 fclose($file);

 $regression = new LeastSquares();
 $regression->train($samples,$labels);

 //  a               x    ,    。
 $a = [0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,29,30,31,37,40,41,45,48,53,55,57,60,61,108,124];
 for($i = 0; $i < count($a); $i ++){
  file_put_contents("putput.txt",($regression->predict([$a[$i]]))."
",FILE_APPEND); // }
그 다음 에 우 리 는 파일 에 저 장 된 데 이 터 를 읽 고 그림 을 그 려 서 마지막 효과 도 를 붙 입 니 다.

코드 는 다음 과 같 습 니 다:

<?php
include_once './src/jpgraph.php';
include_once './src/jpgraph_line.php';

$g = new Graph(1920,1080);
$g->SetScale("textint");
$g->title->Set('data');

$file = fopen('putput.txt','r');
$y = array();
$i = 0;
while(!feof($file)){
 $y[$i] = (float)(fgets($file));
 $i ++;   
} 

$x = [0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,29,30,31,37,40,41,45,48,53,55,57,60,61,108,124];

$linePlot = new LinePlot($y);
$g->xaxis->SetTickLabels($x); 
$linePlot->SetLegend('data');
$g->Add($linePlot);
$g->Stroke();
도형 의 차이 가 비교적 크 고 특히 도형 의 톱날 이 비교적 많은 부분 을 발견 할 수 있다.그러나 이것 은 40 조 의 데이터 이기 때문에 우 리 는 대략적인 도형 추세 가 일치 하 는 것 을 알 수 있다.일반적인 라 이브 러 리 는 이런 학습 을 할 때 데이터 양 이 낮은 상황 에서 정확도 가 매우 낮다.비교적 높 은 정밀도 에 도달 하려 면 대량의 데이터 가 필요 하고 만 개 이상 의 데이터 양 이 필요 하 다.만약 이 데이터 요구 에 도달 하지 못 한다 면,우 리 는 어떤 라 이브 러 리 를 사용 하 는 것 도 헛수고 이다.그래서 기계 학습 의 실천 에서 진정 으로 어 려 운 것 은 정밀도 가 낮 고 배치 가 복잡 하 다 는 등 기술 문제 가 아니 라 데이터 양 이 부족 하거나 품질 이 너무 낮다(한 조 의 데이터 에서 쓸모없는 데이터 가 너무 많다).기계 학습 을 하기 전에 데이터 에 대한 사전 처리 도 필요 하 다.
다음은 꽃술 데 이 터 를 테스트 해 보 겠 습 니 다.모두 세 가지 분류 입 니 다.csv 데 이 터 를 다운로드 하 였 기 때문에 php-ml 에서 공식 적 으로 제공 하 는 csv 파일 을 조작 하 는 방법 을 사용 할 수 있 습 니 다.여 기 는 분류 문제 이기 때문에 라 이브 러 리 에서 제공 하 는 SVC 알고리즘 을 선택 하여 분류 합 니 다.우 리 는 꽃술 데이터 의 파일 이름 을 Iris.csv 로 정 했 습 니 다.코드 는 다음 과 같 습 니 다.

<?php
require 'vendor/autoload.php';

use Phpml\Classification\SVC;
use Phpml\SupportVectorMachine\Kernel;
use Phpml\Dataset\CsvDataset;

$dataset = new CsvDataset('Iris.csv' , 4, false);
$classifier = new SVC(Kernel::LINEAR,$cost = 1000);
$classifier->train($dataset->getSamples(),$dataset->getTargets());

echo $classifier->predict([$argv[1],$argv[2],$argv[3],$argv[4]]);//$argv      ,              
쉽 죠?12 줄 만 짧게 하면 코드 가 끝 납 니 다.이제 테스트 해 보 겠 습 니 다.우리 가 위 에 붙 인 그림 에 따 르 면 우리 가 5.3,1.4,0.2 를 입력 했 을 때 출력 은 Iris-setosa 일 것 이다.우리 한번 봅 시다.

봐 라,적어도 우 리 는 원래 있 던 데 이 터 를 입력 해서 정확 한 결 과 를 얻 었 다.그러나 우 리 는 원 데이터 집중 에 없 는 데 이 터 를 입력 합 니까?두 팀 을 테스트 해 보 겠 습 니 다.

우리 가 이전에 붙 인 두 장의 그림 의 데 이 터 를 보면 우리 가 입력 한 데 이 터 는 데이터 집중 에 존재 하지 않 지만 분 류 는 우리 의 초보적인 관찰 에 따라 합 리 적 이다.
그래서 이 기계 학습 고 는 대부분의 사람들 에 게 충분 하 다.대부분의 사람들 은 이 라 이브 러 리 를 경멸 하고 성능 을 크게 말 하 는 사람 은 기본적으로 큰 소 가 아니다.진짜 소 는 돈 을 찾 느 라 바 쁘 거나 학술 연 구 를 하고 있다.우 리 는 더 많은 것 은 알고리즘 을 파악 하고 그 중의 이치 와 현묘 한 기 회 를 이해 하 는 것 이지 과장 하 는 것 이 아니다.물론 이 라 이브 러 리 는 대형 프로젝트 에 사용 하 는 것 을 권장 하지 않 고 소형 프로젝트 나 개인 프로젝트 등 만 추천 합 니 다.
jpgraph 는 GD 라 이브 러 리 에 만 의존 하기 때문에 인용 을 다운로드 한 후에 사용 할 수 있 습 니 다.대량의 코드 는 그림 그리 기와 초기 데이터 처리 에 놓 여 있 습 니 다.라 이브 러 리 의 뛰어난 패키지 로 학습 코드 는 복잡 하지 않 습 니 다.모든 코드 나 테스트 데이터 세트 가 필요 한 파트너 는 메 시 지 를 남기 거나 개인 편지 등 을 남 길 수 있 습 니 다.저 는 완전한 코드 를 제공 하고 압축 을 풀 면 바로 사용 할 수 있 습 니 다.
이상 의 PHP 머 신 러 닝 라 이브 러 리 php-ml 의 간단 한 테스트 와 사용 방법 은 바로 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 에 게 참고 가 될 수 있 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기