logisticreg code is done
This commit is contained in:
parent
d609ccebd8
commit
8daec32ca2
|
@ -21,10 +21,6 @@
|
|||
|
||||
\begin{document}
|
||||
\maketitle
|
||||
|
||||
\section{实际问题-手写识别}
|
||||
手写识别(Handwriting recognition)是计算机在纸、照片、触摸屏或其他设备中接收并识别人手写的文字等信息的技术,主要应用于光学字符识别(OCR)。手写识别系统能够用来识别汉字、英语、数字等字符。不过本报告的重点不在手写识别,而在于理解MLlib中的logistic回归,因此以识别数字为例。识别数字0~9是个十类别问题,logistic回归最常用的场景是二分类,如果要用logistic回归解决这个问题,要采用one-against-one和one-against-all等做法进行处理,虽然复杂些,但是基本原理是一样的。因此本报告把主要关注点放在对MLlib算法的研究,只利用0和1的样本从而解决二分类问题。
|
||||
|
||||
\section{MLlib相关概念}
|
||||
在MLlib中有许多的概念,其中对理解其算法比较重要的有:\emph{DataFrame},\emph{Pipeline},\emph{Transfromer}和\emph{Estimator}。
|
||||
|
||||
|
@ -36,10 +32,19 @@
|
|||
\end{itemize}
|
||||
|
||||
一个比较简单形象的例子就是文本文档的处理,如下图*所示,上面一行表示了一个包含3个stage的Pipeline,前两个Tokenizer和HashingTF是Transformer,第三个LogisticRegression是一个Estimer。下面一行是一个流经pipeline的数据流,圆柱体代表了DataFrame.当调用pipeline的fit()方法时, Tokenizer.transform() 把原始的Raw text切分成单词,然后把这些单词添加到原DataFrame中形成新的DataFrame从而让HashingTF.transfore()进行处理,他把单词列转化成特征矩阵又添加到新的DataFrame中,最后通过 LogisticRegression.fit()方法产生LogisticRegressionModel。生成的模型可以用于后续的测试等。
|
||||
|
||||
\begin{figure}[h!]
|
||||
\centering
|
||||
\includegraphics[width=16cm]{pipeline.jpg}
|
||||
\caption{MLlib pipeline}
|
||||
\label{pipeline}
|
||||
\end{figure}
|
||||
|
||||
|
||||
\section{问题求解}
|
||||
手写识别(Handwriting recognition)是计算机在纸、照片、触摸屏或其他设备中接收并识别人手写的文字等信息的技术,主要应用于光学字符识别(OCR)。手写识别系统能够用来识别汉字、英语、数字等字符。不过本报告的重点不在手写识别,而在于理解MLlib中的logistic回归,因此以识别数字为例。识别数字0~9是个十类别问题,logistic回归最常用的场景是二分类,如果要用logistic回归解决这个问题,要采用one-against-one和one-against-all等做法进行处理,虽然复杂些,但是基本原理是一样的。因此本报告把主要关注点放在对MLlib算法的研究,只利用0和1的样本从而解决二分类问题。
|
||||
|
||||
\subsection{数据集}
|
||||
|
||||
sdfsdf
|
||||
\end{document}
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
from pyspark import SparkContext
|
||||
from pyspark.sql import SQLContext
|
||||
from pyspark.ml.classification import LogisticRegression
|
||||
from pyspark.mllib.linalg import Vectors
|
||||
from os import listdir
|
||||
from pyspark.ml.evaluation import BinaryClassificationEvaluator
|
||||
sc = SparkContext(appName="PythonlogExample")
|
||||
sqlContext = SQLContext(sc)
|
||||
|
||||
def load_data(data_folder):
|
||||
file_list=listdir(data_folder)
|
||||
file_num=len(file_list)
|
||||
datas = list()
|
||||
for i in range(file_num):
|
||||
filename=file_list[i]
|
||||
fr=open('%s/%s' %(data_folder,filename))
|
||||
data_in_line = list()
|
||||
for j in range(32):
|
||||
line_str=fr.readline()
|
||||
for k in range(32):
|
||||
data_in_line.append(int(line_str[k]))
|
||||
|
||||
|
||||
label = filename.split('.')[0].split("_")[0]
|
||||
# print "file:%s,label is %s"%(filename,label)
|
||||
datas.append((float(label),Vectors.dense(data_in_line)))
|
||||
|
||||
return sqlContext.createDataFrame(datas,["label","features"])
|
||||
|
||||
if __name__ == "__main__":
|
||||
train_df = load_data("train")
|
||||
|
||||
lr = LogisticRegression(maxIter=10, regParam=0.3, elasticNetParam=0.8)
|
||||
lrModel = lr.fit(train_df)
|
||||
|
||||
test_df = load_data("test")
|
||||
predictions = lrModel.transform(test_df)
|
||||
#predictions.select("prediction","label").show(5)
|
||||
|
||||
evaluator = BinaryClassificationEvaluator(labelCol="label", rawPredictionCol="rawPrediction", metricName="areaUnderPR")
|
||||
accuracy = evaluator.evaluate(predictions)
|
||||
print("Test Error = %g " % (1.0 - accuracy))
|
Loading…
Reference in New Issue