示例

基本流程是定义参数,提供训练数据以生成模型,然后根据模型进行预测。 有一组默认参数,它们应该可以获得大多数输入的结果,所以我们将从查看数据开始。

数据以文件、流或数组的形式提供。 如果以文件或流的形式提供,它必须包含每个训练示例一行,并且必须格式化为一个整数类(通常为 1 和 -1),然后是一系列特征/值对,按特征顺序递增。 特征是整数,值是浮点数,通常按比例缩放为 0-1。 例如

-1 1:0.43 3:0.12 9284:0.2

在文档分类问题中,例如垃圾邮件检查器,每行都代表一个文档。 将有两个类别,-1 代表垃圾邮件,1 代表正常邮件。 每个特征都代表某个词语,而值则代表该词语对文档的重要性(可能是频率计数,并根据总计按比例缩放为单位长度)。 为 0 的特征(例如,该词语根本没有出现在文档中)将不被包含。

在数组模式下,数据必须作为数组的数组传递。 每个子数组必须将类作为第一个元素,然后是特征值对的键=>值集。

此数据将传递给 SVM 类的 train 函数,该函数将在成功时返回一个 SVM 模型。

生成模型后,它可以用来对以前未见的数据进行预测。 这可以作为数组传递给模型的 predict 函数,与之前相同的格式,但没有标签。 响应将是类别。

模型可以根据需要保存和恢复,使用 save 和 load 函数,这两个函数都采用文件位置。

示例 #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");
?>

添加注释

用户贡献的注释 6 个注释

razvan_bc at yahoo dot com
1 年前
好吧,我做了更多测试...

获取源代码
https://github.com/ianbarber/php-svm/blob/master/tests/002_predict.phpt 已修改..
<?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";
}
?>

通过将额外的 https://github.com/ianbarber/php-svm/blob/master/tests/australian.scale 放置在 .php 文件所在的测试文件夹中,我能够在运行后获得结果
================================

ok1

所以它可以工作
razvan_bc at yahoo dot com
1 年前
我忘记了一个细节!
如果您想在 Windows XAMPP 中手动安装,则安装文件夹应为 c:\xampp\php\lib\libsvm-3.1(对于我在第一篇文章中描述的文件)和扩展程序在 c:\xampp\php\ext(php_svm.dll)中

可以运行。 祝你好运
razvan_bc at yahoo dot com
1 年前
我从 pecl.php.net 下载了 svm php_svm-0.2.3-8.1-ts-vs16-x64.zip,所以我在 README.md 中阅读了..

=====================================================
数据以文件、流或数组的形式提供。 如果以文件或流的形式提供,它必须包含每个训练示例一行,并且必须格式化为一个整数类(通常为 1 和 -1),然后是一系列特征/值对,按特征顺序递增。 特征是整数,值是浮点数,通常按比例缩放为 0-1。 例如

-1 1:0.43 3:0.12 9284:0.2

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

因此,用内容 -1 1:0.43 3:0.12 9284:0.2 创建 traindata.txt 使我能够在第二个示例中使用它

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

我运行和编辑 model2.svm 文件后,得到了以下内容:
-------------------------------------------------------------------
svm_type c_svc
kernel_type rbf
gamma 0.00010771219302024989
nr_class 1
total_sv 0
rho
label -1
nr_sv 0
SV
--------------------------------------------------------------------

我认为它确实有效,正如我所说,我需要进行更多测试来控制主要功能,并考虑其他更复杂的情况。
razvan_bc at yahoo dot com
1 年前
环境:php 8.1,windows 64
----------------------------------

安装 (适用于初学者)
--------
访问 https://github.com/ianbarber/php-svm

从页面上找到的 URL 获取(安装脚本):
.. http://www.csie.ntu.edu.tw/~cjlin/cgi-bin/libsvm.cgi?+http://www.csie.ntu.edu.tw/~cjlin/libsvm+tar.gz

并手动安装:
1.php.ini
(在主要扩展组 extension=... 之后,大约 12 个条目)
...
extension=svm
...

2.在 php 目录中手动创建一个名为 libsvm-3.1 的文件夹,然后将 libsvm.dll、libsvmread.mexw64、libsvmwrite.mexw64、svmpredict.mexw64、svm-predict.exe、svm-scale.exe、svm-toy.exe、svmtrain.mexw64、svm-train.exe 解压到该文件夹中!

运行
<?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');

?>

通过服务器(apache、php、mariadb;甚至自定义或 xampp)我现在得到了结果。
我得到了 model.svm 文件,内容如下:
================================
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
=================================

我认为这对于初创公司来说非常棒。
我将查看 github 中的 phpt 文件,以了解为什么在我昨天的测试中,一些函数需要两个参数而不是手册中提到的一个参数导致了错误。
razvan_bc at yahoo dot com
1 年前
由用户 “6765419 at qq dot com” 标注为负面的示例也同样有效!

<?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;
?>

所以我得到了

float(-1)
6765419 at qq dot com
10 年前
$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