PHPCon Poland 2024

Примеры

Процесс довольно прост: задаём параметры, предоставляем обучающие данные, на основе которых будет создана модель, а затем делаем прогнозы, основанные на этой модели. Набор параметров по умолчанию гарантирует получение хоть какого-то результата практически для любых входных данных, так что на нем останавливаться не будем и сразу перейдём к обучающим данным.

Есть три пути предоставления обучающих данных: файл, поток и массив. Если данные предоставляются с помощью файла или потока, то на каждой строке должен содержаться один обучающий пример, отформатированный следующим образом: в начале должно быть целое число (обычно 1 или -1), это число обозначается термином "класс", а следом за ним перечисление пар признак:значение в порядке увеличения признака. Признаки должны быть целыми числами, а их значения рациональными, обычно на диапазоне 0-1. Например:

-1 1:0.43 3:0.12 9284:0.2

В проблеме классификации документов, например, при проверке письма на спам, каждая строка должна представлять один документ. Для задачи проверки на спам нам понадобится два класса, -1 для спама и 1 для нормального письма. Каждый признак должен означать некое слово, а его значение - важность данного слова в документе (возможно, частота появления относительно длины элемента). Признаки со значением 0 (т.е. слово в документе не встречается) просто не включаем в набор.

В случае использования массива, данные должны быть представлены в виде массива массивов, в котором каждый вложенный массив должен первым элементом содержать класс, а все последующие элементы содержать пары "признак" => "значение".

Эти данные передаются обучающей функции класса SVM, которая в результате вернёт модель (SVMModel).

Созданная модель может использоваться для построения предположений о классе новых объектов, описанных признаками и их значениями. Данные, на основе которых делаются предположения, должны быть переданы функции модели в том же формате, что описан выше, но без указания их класса (т.е. без первого элемента), которая вернёт предполагаемый класс, подходящий под эти данные.

Модель впоследствии можно сохранять и загружать с помощью функций, принимающих путь к файлу в качестве параметра.

Пример #1 Обучение из массива

<?php
$data
= array(
array(-
1, 1 => 0.43, 3 => 0.12, 9284 => 0.2),
array(
1, 1 => 0.22, 5 => 0.01, 94 => 0.11),
);

$svm = new SVM();
$model = $svm->train($data);

$data = array(1 => 0.43, 3 => 0.12, 9284 => 0.2);
$result = $model->predict($data);
var_dump($result);
$model->save('model.svm');
?>

Вывод приведённого примера будет похож на:

int(-1)

Пример #2 Обучение из файла

<?php
$svm
= new SVM();
$model = $svm->train("traindata.txt");
?>

add a note

User Contributed Notes 6 notes

up
0
razvan_bc at yahoo dot com
1 year ago
the example rated negative rated by the guy sign "6765419 at qq dot com" also works too!

<?php
$data
= array(
array(-
1, 1 =>170, 2 => 60),//-1 表示男生,key 1表示身高,key 2表示体重=Represents a boy, key 1 represents height, key 2 represents weight
array(-1, 1 =>180, 2 => 70),
array(
1, 1 => 160, 2 => 46),//1 表示女生,key 1表示身高,key 2表示体重=Represents a girl, key 1 represents height, key 2 represents weight
array(1, 1 => 155, 2 => 40),
);
$svm = new SVM();
$model = $svm->train($data);
$data = array( 1 => 165, 2 =>60);//测试数据 =Test Data
$result = $model->predict($data);
echo
var_dump($result);//echo var_export($result);
//return;
?>

so i got :

float(-1)
up
0
razvan_bc at yahoo dot com
1 year ago
ok i did more tests..

getting the source
https://github.com/ianbarber/php-svm/blob/master/tests/002_predict.phpt modified ..
<?php
$svm
= new svmmodel();
//$result = $svm->load(dirname(__FILE__) . '/australian.model');
$result = $svm->load('australian.model');

if(
$result) {
$data = array(
"1" => 1,
2 => -0.731729,
3 => -0.886786,
4 => -1,
5 => 0.230769,
"6" => -0.25,
7 => -0.783509,
8 => 1,
9 => 1,
10 => "-0.820896",
11 => -1,
13 => -0.92,
"14" => "-1"
);
$result = $svm->predict($data);
if(
$result > 0) {
echo
"ok";
print_r($result);
} else {
echo
"predict failed: $result";
}
} else {
echo
"loading failed";
}
?>

with additional https://github.com/ianbarber/php-svm/blob/master/tests/australian.scale dropped inside the test folder where .php file is located i am able after running to get the result:
================================

ok1

so it's work
up
0
razvan_bc at yahoo dot com
1 year ago
i forgot a detail!
the installation folders if you think to install it manually in windows xampp should be c:\xampp\php\lib\libsvm-3.1 (for the files i described in the first post) and extension in c:\xampp\php\ext (php_svm.dll)

works.good luck
up
0
razvan_bc at yahoo dot com
1 year ago
from pecl.php.net i download svm php_svm-0.2.3-8.1-ts-vs16-x64.zip so i read in README.md ..

=====================================================
Data is supplied in either a file, a stream, or as an an array. If supplied in a file or a stream, it must contain one line per training example, which must be formatted as an integer class (usually 1 and -1) followed by a series of feature/value pairs, in increasing feature order. The features are integers, the values floats, usually scaled 0-1. For example:

-1 1:0.43 3:0.12 9284:0.2

=====================================================

so creating traindata.txt with the content -1 1:0.43 3:0.12 9284:0.2 leads me to use it in the second example:

<?php
$svm
= new SVM();
$model = $svm->train("traindata.txt");
$model->save('model2.svm');
?>

and running and editing the model2.svm i got the content:
-------------------------------------------------------------------
svm_type c_svc
kernel_type rbf
gamma 0.00010771219302024989
nr_class 1
total_sv 0
rho
label -1
nr_sv 0
SV
--------------------------------------------------------------------

so yes i think it's work, how i said i need to do more tests to get control with main functions to think to other more complicated
up
0
razvan_bc at yahoo dot com
1 year ago
premises:php 8.1 ,windows 64
----------------------------------

install (for beginners)
--------
after i visit https://github.com/ianbarber/php-svm

and i got from url found on page(install script)
.. http://www.csie.ntu.edu.tw/~cjlin/cgi-bin/libsvm.cgi?+http://www.csie.ntu.edu.tw/~cjlin/libsvm+tar.gz

and manual install it:
1.php.ini
(after the main group extension=... about 12 pieces)
...
extension=svm
...

2.I put manually inside php a folder called libsvm-3.1 then i unzip there libsvm.dll , libsvmread.mexw64 ,libsvmwrite.mexw64 , svmpredict.mexw64 , svm-predict.exe, svm-scale.exe , svm-toy.exe , svmtrain.mexw64, svm-train.exe !

running
<?php

$data
= array(
array(-
1, 1 => 0.43, 3 => 0.12, 9284 => 0.2),
array(
1, 1 => 0.22, 5 => 0.01, 94 => 0.11),
);

$svm = new SVM();
$model = $svm->train($data);

$data = array(1 => 0.43, 3 => 0.12, 9284 => 0.2);
$result = $model->predict($data);
var_dump($result);
$model->save('model.svm');

?>

via server(apache ,php,mariadb;even custom or xampp) now i got results:
i got model.svm with the content
================================
svm_type c_svc
kernel_type rbf
gamma 0.00010771219302024989
nr_class 2
total_sv 2
rho 0
label 1 -1
nr_sv 1 1
SV
1 1:0.22 5:0.01 94:0.11
-1 1:0.43 3:0.12 9284:0.2
=================================

so i think is very cool ..for a startup.
i will look around phpt files from github to understand why in yesterday's tests i got errors with some function witch require 2 parameters and not one like in the manual
up
-8
6765419 at qq dot com
10 years ago
$data = array(
array(-1, 1 =>170, 2 => 60),//-1表示男生,key 1表示身高,key 2表示体重
array(-1, 1 =>180, 2 => 70),
array(1, 1 => 160, 2 => 46),//1表示女生,key 1表示身高,key 2表示体重
array(1, 1 => 155, 2 => 40),
);
$svm = new SVM();
$model = $svm->train($data);
$data = array( 1 => 165, 2 =>60);//测试数据
$result = $model->predict($data);
echo var_export($result);
return;
To Top