KNN算法[分类算法]
kNN(k-近邻)分类算法的实现
(1) 简介:

(2)算法描述:

(3)


<?php
/*
*KNN K-近邻方法(分类算法的实现)
*/ /*
*把.txt中的内容读到数组中保存,$filename:文件名称
*/
//--------------------------------------------------------------------
function getFileContent($filename)
{
$array = array(null);
$content = file_get_contents($filename);
$result = explode("\r\n",$content);
//print_r(count($result));
for($j=0;$j<count($result);$j++)
{
//print_r($result[$j]."<br>");
$con = explode(" ",$result[$j]);
array_push($array,$con);
}
array_splice($array,0,1);
return $array;
}
//-------------------------------------------------------------------- /*
*/
//希尔排序算法
//--------------------------------------------------------------------
function shell_sort($array)//降序
{
$dh=(int)(count($array)/2);
while($dh>=1)
{
for($i=$dh;$i<count($array);$i++)
{
$temp=array($array[$i][0],$array[$i][1]);
$j=$i-$dh;
while($j>=0&&($array[$j][1]<$temp[1]))
{
$array[$j+$dh][1]=$array[$j][1];
$array[$j+$dh][0]=$array[$j][0];
$j-=$dh;
}
$array[$j+$dh][1]=$temp[1];
$array[$j+$dh][0]=$temp[0];
}
$dh=(int)($dh/2);
}
return $array;
}
//-------------------------------------------------------------------------
/*
*KNN算法
*$test:测试文本;$train:训练文本;$flagsyes:yes;$flagsno:no
*/
//--------------------------------------------------------------------
function KNN($test,$train,$flagsyes,$flagsno)
{
for($i=1;$i<count($train);$i++)
{
for($j=1;$j<count($test)-1;$j++)
{
if($test[$j]==$train[$i][$j]) $a[$j] = 1;
else $a[$j] = 0;
} //求两个例子之间的欧氏距离
$sum = 0;
for($j=1;$j<count($test)-1;$j++)
{
$sum += pow(1-$a[$j],2);
}
$distance[$i] = sqrt($sum);
}
$d = array(array(NULL,NULL));
for($i=1;$i<count($train);$i++)
{
$d[$i-1][0] = $train[$i][count($train[$i])-1];
$d[$i-1][1] = 1 /(1+ $distance[$i]) ;
}
$result =shell_sort($d); $k = (int) sqrt(count($train)-1);//k=sqrt(N); $count_yes = 0;
for($i=0;$i<$k;$i++)
{
if($result[$i][0]==$flagsyes)$count_yes++;
}
$count_no = $k - $count_yes; if($count_yes>$count_no)return $flagsyes;
else return $flagsno;
}
//-------------------------------------------------------------------- $train = getFileContent("train.txt");
$test = getFileContent("test.txt"); for($i=1;$i<count($test);$i++)
{
$test[$i][count($test[0])-1] = KNN($test[$i],$train,Y,N);
}
/*
*将数组中的内容读到.txt中
*/
//--------------------------------------------------------------------
$fp= fopen('result.txt','wb');
for($i=0;$i<count($test);$i++)
{
$temp = NULL;
for($j=0;$j<count($test[$i]);$j++)
{
$temp = $test[$i][$j]."\t";
fwrite($fp,$temp);
}
fwrite($fp,"\r\n");
}
fclose($fp);
//-------------------------------------------------------------------- /*
*打印输出
*/
//--------------------------------------------------------------------
echo "<pre>";
print_r($test);
echo "</pre>";
//--------------------------------------------------------------------
?>




KNN算法[分类算法]的更多相关文章
- KNN邻近分类算法
K邻近(k-Nearest Neighbor,KNN)分类算法是最简单的机器学习算法了.它采用测量不同特征值之间的距离方法进行分类.它的思想很简单:计算一个点A与其他所有点之间的距离,取出与该点最近的 ...
- 决策树ID3算法[分类算法]
ID3分类算法的编码实现 <?php /* *决策树ID3算法(分类算法的实现) */ /* *求信息增益Grain(S1,S2) */ //-------------------------- ...
- Naive Bayes(朴素贝叶斯算法)[分类算法]
Naïve Bayes(朴素贝叶斯)分类算法的实现 (1) 简介: (2) 算法描述: (3) <?php /* *Naive Bayes朴素贝叶斯算法(分类算法的实现) */ /* *把. ...
- KNN分类算法及python代码实现
KNN分类算法(先验数据中就有类别之分,未知的数据会被归类为之前类别中的某一类!) 1.KNN介绍 K最近邻(k-Nearest Neighbor,KNN)分类算法是最简单的机器学习算法. 机器学习, ...
- KNN分类算法--python实现
一.kNN算法分析 K最近邻(k-Nearest Neighbor,KNN)分类算法可以说是最简单的机器学习算法了.它采用测量不同特征值之间的距离方法进行分类.它的思想很简单:如果一个样本在特征空间中 ...
- 数据结构与算法---排序算法(Sort Algorithm)
排序算法的介绍 排序也称排序算法 (Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程. 排序的分类 1) 内部排序: 指将需要处理的所有数据都加载 到内部存储器(内存)中进 ...
- 数据挖掘之分类算法---knn算法(有matlab例子)
knn算法(k-Nearest Neighbor algorithm).是一种经典的分类算法.注意,不是聚类算法.所以这种分类算法 必然包括了训练过程. 然而和一般性的分类算法不同,knn算法是一种懒 ...
- knn分类算法学习
K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的 ...
- 分类算法-----KNN
摘要: 所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用她最接近的k个邻居来代表.kNN算法的核心思想是如果一个样本在特征空间中的k个最相似的样本中的大多数属于某一个类别,则该样本也属于 ...
随机推荐
- AngularJS学习资源
图灵社区 : 图书 : AngularJS入门教程 http://www.ituring.com.cn/book/1206 AngularJS 教程 | 菜鸟教程 http://www.runoob. ...
- Linux 常用命令学习
sed 大法: cat file | sed 's/string/replace_str/' file 按大小分割文件 split -b 100m filename 设置vi不自动转换tab: set ...
- url的4种访问方式
1.PATHINFO 模式 -- 重点!!!!!! http://域名/项目名/入口文件/模块名/方法名/键1/值1/键2/值2 (可以修改 'URL_PATHINFO_DEPR'=>'-',/ ...
- ucenter 同步登录总结
部署: discuz默认安装后就安装了uc_server应用 各应用根目录必须有uc_client文件夹. 下载ucenter程序查看范例程序 应用管理中,应用的主 URL必须指向到应用的根目录,应用 ...
- EC读书笔记系列之17:条款41、42、43、44、45、46
条款41 了解隐式接口与编译器多态 记住: ★classes和templates都支持接口和多态 ★对classes而言接口是显式的(explicit),以函数签名为中心.多态则是通过virtual函 ...
- PHP 提交checkbox表单时 判断复选框是否被选中
function GetTitleImgPath(){ $titleImgPath = ""; if (isset($_POST["titlecheckbox" ...
- 一个小型的DBHelper的诞生(1)
一直想做一个自己的简单的 DBHelper .没有其他原因,只是其他的轮子用起来感觉太重了. 设计的大体思路如下: 大体方向: 生成一个简单版本的DB层,需要支持数据库 MySql,Oracle,Sq ...
- 关于webapp中的文字单位的一些捣腾
前言 文字是网页内容的一枚大将,我们无时无刻都在看着它,只要是你盯屏幕上的任何一个地方都会有文字.地铁上无时无刻都在盯着屏幕上的人对于文字更为敏感,太大不行,太小TN又看不清上面到底在说什么,有时候车 ...
- codeforces 8D Two Friends 二分+ 判断三个圆是否有公共交点
题目链接 有两个人x, y, 现在在A点, x要直接去B点, y要先去C点在去B点, 现在给出x, y两人可以行走的最大距离T1, T2, 求出他们从A点出发之后, 可以走的最长的公共路径. 我们先看 ...
- silverlight控件动画状态的过渡
动画代码: xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows" <vsm:VisualState ...