利用PHP实现机器学习,php-ml的应用

php-ml机器学习库

https://php-ml.readthedocs.io/en/latest/#author 库中包含算法,交叉验证,神经网络,预处理,特征提取等功能。

利用composer安装

composer require php-ai/php-ml

近邻算法,$samples是数据,$labels是标记,传入的参数[3,2]由模型训练获得结果最靠近d,所以叫近邻算法,

近邻算法还有一些细分:

k-NN分类 
输入:包含特征空间中的 k 个最接近的训练样本。 
输出:一个分类族群。
k-NN回归 
输入:包含特征空间中的 k 个最接近的训练样本。 
输出:该对象的属性值。该值是其 k 个最近邻居的值的平均值。

演示下KNN分类 

train($samples, $labels);

echo $classifier->predict([3, 2]);

线性,近邻,贝叶斯

train($samples, $labels);
/*预测190cm高 80kg的人,是男还是女*/
echo $classifier->predict([190, 80]); //线性分类,输出1,预测结果为男性

/*
 * KNN-分类
 * */
$classifier = new KNearestNeighbors();
/* 对其进行训练   */
$classifier->train($samples, $labels);
/*预测190cm高 80kg的人,是男还是女*/
echo $classifier->predict([190, 80]); //输出1,近邻算法预测结果也为男性

/*
 * 朴素贝叶斯
 * 最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model,NBM)。
 * 和决策树模型相比,朴素贝叶斯分类器(Naive Bayes Classifier 或 NBC)发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。
 * 同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。
 * 理论上,NBC模型与其他分类方法相比具有最小的误差率。
 * 但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这给NBC模型的正确分类带来了一定影响。
 * */
$classifier = new NaiveBayes();
$classifier->train($samples, $labels);
echo $classifier->predict([158, 45],[170,30]); //输出-1,女性

利用apriori进行关联性规则学习

train($samples, $labels);
/*
假设又有一位G用户,他购买了衣服,
电商网站想要通过他购买的衣服给她推荐别的产品
以便他购买更多的商品
系统会根据以往用户的训练数据推断出G用户可能需要的商品
*/
print_r($associator->predict(['衣服']));
//return  Array ( [0] => Array ( [0] => 鞋子 ) [1] => Array ( [0] => 辣条 ) [2] => Array ( [0] => 面条 ) )
/*
总结:这种算法根据一些行为来推断下一个行为
*/

回归预测

require_once 'vendor/autoload.php';
use Phpml\Regression\LeastSquares;
use Phpml\Regression\SVR;
/*
我们现在对一支股票进行预测
张氏股从2010年开始
2010年单股价123.5$
2011年单股价124.5$
2012年单股价134.5$
2013年单股价144$
2014年单股价144.7$
2015年单股价154.5$
2016年单股价184.5$
我们根据每年的股价涨势计算出
2010年 涨1.1%
2011年 涨1.2%
2012年 涨2.1%
2013年 涨3.1%
2014年 涨3.3%
2015年 涨4.1%
2016年 涨5.1%
*/
/*将上面的数据放入$samples数组里
*/
$samples = [[2010], [2011], [2012], [2013], [2014], [2015],[2016]];
/*
在labels中存入每年的股价涨势
*/
$labels = [1.1, 1.2, 2.1, 3.1, 3.3, 4.1,5.1];
/*
下面我们采用最小二乘法逼近线性模型进行预测
*/
$regression = new LeastSquares();
/*
下面我们采用libsvm的向量回归进行预测
*/
$regression = new SVR(Kernel::LINEAR);
/* 对其进行训练   */
$regression->train($samples, $labels);
/*
如果我们想知道2017年张氏股的涨势是什么样的,我们用最小二乘法逼近线性模型来进行预测
*/
print_r($regression->predict([2017]));
// return 5.53667
/*
我们预测的结果是涨势5.53%
该实例采用回归的最小二乘法算法和向量回归来进行预测的
*/

 

你可能感兴趣的:(php)