designe is done
This commit is contained in:
parent
cd3df88598
commit
f9e5418292
53
3.tex
53
3.tex
|
@ -93,7 +93,47 @@ NKK缺点有:
|
|||
|
||||
\section{实验过程}
|
||||
|
||||
\subsection{算法设计}
|
||||
|
||||
\subsection{算法模型设计}
|
||||
本节中简要介绍我实现的KNN涉及到的主要类和算法的大致模型,下一节详细介绍具体实现细节。
|
||||
|
||||
\begin{table}[!h]
|
||||
\renewcommand\arraystretch{2}
|
||||
\centering
|
||||
\begin{tabular}{c|c}
|
||||
\hline
|
||||
类名 & 功能 \\
|
||||
\hline
|
||||
KNN & 实现KNN主要逻辑功能,距离算法由子类实现\\
|
||||
\hline
|
||||
KNNWithEuclid & 利用欧几里得距离计算差异性的KNN \\
|
||||
\hline
|
||||
KNNWithCos & 利用余弦相似度计算差异性的KNN \\
|
||||
\hline
|
||||
DataHelper & 数据操作的辅助类 \\
|
||||
\hline
|
||||
Statistics & 用于统计数据特性的辅助类 \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\caption{主要相关类及其功能}
|
||||
\end{table}
|
||||
|
||||
其大致模型如类图所示。
|
||||
|
||||
\begin{figure}[h!]
|
||||
\centering
|
||||
\includegraphics[width=16cm]{classfigure.jpg}
|
||||
\caption{算法模型示意图}
|
||||
\label{knnmodel}
|
||||
\end{figure}
|
||||
|
||||
使用该算法解决实际问题时通常流程所对应的时序图为。
|
||||
\begin{figure}[h!]
|
||||
\centering
|
||||
\includegraphics[width=16cm]{seqfigure.jpg}
|
||||
\caption{算法运行时序图}
|
||||
\label{knnmodel}
|
||||
\end{figure}
|
||||
|
||||
|
||||
\subsection{实现KNN算法}
|
||||
|
@ -174,11 +214,13 @@ for x in testData:
|
|||
\section{实验结果}
|
||||
本次报告分别从K值和距离算法两个方面对实现的KNN算法进行测试,下面两个表分别是K值从1到10时利用欧几里得距离和余弦相似度对946个样本利用KNN预测得到的结果:
|
||||
|
||||
\begin{table}[!hbp]
|
||||
\begin{table}[!h]
|
||||
\renewcommand\arraystretch{1.1}
|
||||
\centering
|
||||
\begin{tabular}{c c c}
|
||||
\hline
|
||||
K值 & 预测错误数 & 越策错误率 \\
|
||||
|
||||
K值 & 预测错误数 & 预测错误率 \\
|
||||
\hline
|
||||
1 & 13 & 0.013742 \\
|
||||
|
||||
|
@ -205,10 +247,11 @@ K值 & 预测错误数 & 越策错误率 \\
|
|||
\end{table}
|
||||
|
||||
\begin{table}[!h]
|
||||
\renewcommand\arraystretch{1.1}
|
||||
\centering
|
||||
\begin{tabular}{c c c}
|
||||
\hline
|
||||
K值 & 预测错误数 & 越策错误率 \\
|
||||
K值 & 预测错误数 & 预测错误率 \\
|
||||
\hline
|
||||
1 & 11 & 0.011628 \\
|
||||
|
||||
|
@ -233,7 +276,7 @@ K值 & 预测错误数 & 越策错误率 \\
|
|||
\end{tabular}
|
||||
\caption{利用余弦相似度得到的结果}
|
||||
\end{table}
|
||||
|
||||
从上面两个表中可以看出,K的取值对于距离函数取欧几里得距离还是余弦相似度都有很大的影响。在K值取1到10这个范围内,欧几里得算法随着K值的增加,错误率先是下降然后再增高,并且K=3的时候效果最好,错误率是最低的,并且在K=8的时候又出现了一个波动。对于余弦相似度来说,在K=1的时候效果最好,随着K值的增加,错误率是先增高后下降然后再增高。在取相同的K值时两个距离函数的错误率不好比较,都有表现好的情况也都有表现差的情况,很少有一样的情况。但是在K取值在1到10这个区间内,他们两个取到的最好效果是一样的,都是错判11个样本。当然如果K的取值范围更大一些的话,错误率肯定还会变化。通过上面的对比可以发现KNN算法对参数K和距离函数的选择还是很敏感的。
|
||||
|
||||
|
||||
\section{实验总结}
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
Binary file not shown.
After Width: | Height: | Size: 48 KiB |
|
@ -47,7 +47,7 @@ SystemML & 66 & 289 & 109 \\
|
|||
\caption{各个系统在github上的关注度}
|
||||
\end{table}
|
||||
|
||||
从上表可以看出关注度最高的是Tensforflow,其次是MLlib,无论是Star数还是fork数都是遥遥领先于其他几个系统。如此高的关注度说明了这两个系统得到了开发人员的广泛认可和支持。在我看来这就形成了一个如下图所示的“开源软件开发良性循环”:一个项目质量高,那么用户和开发者就越喜欢,从而就会积极地去贡献自己的力量,也就会促使该项目的质量进一步提高,如此循环不断。当然TensorFlow本身质量高之外,和Google在业内的影响力也分不开。我最看好的是MLlib,因为现在它是Spark原生集成的库,对运行在Sark上有先天的优势,借着Sark的势头应该会得到更加迅猛的发展和应用【!!!再加一些Spar今年峰会概况】。
|
||||
从上表可以看出关注度最高的是Tensforflow,其次是MLlib,无论是Star数还是fork数都是遥遥领先于其他几个系统。如此高的关注度说明了这两个系统得到了开发人员的广泛认可和支持。在我看来这就形成了一个如下图所示的“开源软件开发良性循环”:一个项目质量高,那么用户和开发者就越喜欢,从而就会积极地去贡献自己的力量,也就会促使该项目的质量进一步提高,如此循环不断。当然TensorFlow本身质量高之外,和Google在业内的影响力也分不开。我最看好的是MLlib,因为现在它是Spark原生集成的库,对运行在Sark上有先天的优势,借着Sark的势头应该会得到更加迅猛的发展和应用。
|
||||
|
||||
\begin{figure}[h!]
|
||||
\centering
|
||||
|
|
Loading…
Reference in New Issue