PHP 머 신 러 닝 라 이브 러 리 php-ml 의 간단 한 테스트 및 사용 방법
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 의 간단 한 테스트 와 사용 방법 은 바로 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 에 게 참고 가 될 수 있 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PHPStorm 파일의 자동 저장 기능을 끄고 동작을 가볍게 만듭니다.PHPStorm (IntelliJ)의 파일 자동 저장 기능은 데이터 손실을 미연에 방지하기 때문에 편리하지만 Samba 등의 원격 서버의 디렉토리를 마운트하거나 Grunt Watch에서 파일 저장을 트리거로 빌드 실...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.