利用Weka进行线性回归预测

时间:2024-03-31 10:46:47

一、实验目的和内容

(一)实验目的和内容

利用Weka对现有数据进行短期预测。先利用excel和weka软件将数据记性预处理,再将数据载入weka中,开始创建模型并进行预测。通过本实验,掌握Weka软件的使用,对数据创建模型并预测。从而掌握回归分析的基本思想和方法。

(二)背景知识

1、Weka

Weka全名怀卡托智能分析环境(Waikato Environment for Knowledge Analysis),是基于JAVA环境下开源的机器学习(machine learning)以及数据挖掘(data mining)软件。也是一个可视化的数据分析工具。

其功能模块分为:weka可以对数据进行预处理,比如说离散化、标准化等。在执行分类算法之前,weka还可以对属性进行删选,里面提供了不少筛选方法,比如主成分分析方法PCA,信息增益方法等,帮助我们筛选更有效的属性,以此提高分类准确率。同时,weka提供了分类、聚类、关联规则方法。最后一个是对数据集整体的可视化结果,分析了每个属性的分布情况,用数值和柱形图体现。

2、回归分析

回归分析(regression analysis)是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。回归的现代解释是非常简洁的:回归时研究因变量对自变量的依赖关系的一种统计分析方法,目的是通过自变量的给定值来估计或预测因变量的均值。它可用于预测、时间序列建模以及发现各种变量之间的因果关系。

有各种各样的回归技术用于预测。这些技术主要有三个度量(自变量的个数,因变量的类型以及回归线的形状),主要含有Logistic Regression逻辑回归、Polynomial Regression多项式回归和Stepwise Regression逐步回归等多种回归分析的方法。

3、Linear Regression线性回归

在本次实验中我们主要运用Linear Regression线性回归,线性回归通常是人们在学习预测模型时首选的技术之一。在这种技术中,因变量是连续的,自变量可以是连续的也可以是离散的,回归线的性质是线性的。

线性回归使用最佳的拟合直线(也就是回归线)在因变量(Y)和一个或多个自变量(X)之间建立一种关系。

多元线性回归可表示为Y=a+b1*X +b2*X2+ e,其中a表示截距,b表示直线的斜率,e是误差项。多元线性回归可以根据给定的预测变量(s)来预测目标变量的值。

二、实验过程

(一)数据预处理

1、Excel另存为csv文件

(1)将老师所给的数据复制至excel中,并将数据中‘_’项改为‘0’。然后考虑到arff格式文件不方便直接创建,所以先将其另存为.csv文件的数据。

(2)起初并未将行标题改为英文格式,而是直接用weka软件对另存为的csv文件进行文件格式转换,发现转换后的文件出现了乱码。后将行标题全部改为英文,再次利用weka软件进行文件转换,转换成功。

补‘0’、改为英文和另存为csv文件部分截图如下:

利用Weka进行线性回归预测

图1 csv文件

2、利用weka软件进行文件格式转换。

(1)将csv文件载入weka软件。

具体操作为:点击Tools->点击ArffViewer->File,同时将欲打开的文件类型改为CSV data files(*.csv)格式。将第一步中得到的csv文件成功载入。

利用Weka进行线性回归预测

利用Weka进行线性回归预测

图2-3 打开csv文件

(2)将打开的csv文件另存为arff格式的文件。

具体操作为:依然为刚才csv文件数据展示的界面,点击File->Save as,同时选择欲保存的文件类型,选择保存位置和保存的文件名。保存成功

利用Weka进行线性回归预测

利用Weka进行线性回归预测

图4-5 另存为data.arff文件

(二)利用weka进行预测

数据预处理完成后,我们就可以开始利用weka软件创建回归模型并进行数据预测。

1、将arff文件载入至weka中。

 具体操作为:打开Weka->选择Explorer->Preprocess->Open file,选择第一步中的data.arff。成功打开,显示如下图窗口。

在下面的窗口中,我们能够查看即将欲处理的数据,左侧显示预处理的数据有8列(Attributes:8)、14行(Instances:14);右侧显示用户指定某一列的数据的最大值(Maximum)、最小值(Minimum)等。

利用Weka进行线性回归预测

图6 数据载入至weka中

2、利用weka创建模型。

具体操作为:依然在上一步的窗口下,点击Classify->Choose->选择functions下的LinearRegression-S0-R 1.0E-8-num-decimal-places 4,然后选择创建模型所需要的数据。

(1)选择Use training set来构建模型。

(2)选择实际人口数(Actual_popu)作为模型的因变量。

(3)单击Start开始创建回归模型。

利用Weka进行线性回归预测

图7 选择Use training set

利用Weka进行线性回归预测

图8 创建线性回归模型成功

三、实验结果

(一)线性回归模型如下(包含所有数据)

利用Weka进行线性回归预测

图9 线性回归模型

(二)验证线性回归模型

无法在网上查找2014年北京市人口相关属性值,因此需选用2013年的相关属性值,检验所创建的线性回归模型。为更好的检验,也同时选用了2012年的相关属性值进行检验。

因此,我将原始数据中2012年和2013年的相关数据全部删除,再次按照实验过程创建回归模型,得到新的线性回归模型如下图所示。

用模型预测出的2013年Actual_popu=-995.7343* 0.087348549+-79361.8638* 0.031467802+4723.1111,计算出实际人口数为2138.7917372961与实际数据中2115相差约23万。相差较大,所创建的线性回归模型的准确率有待考证,因此再次用模型预测出2012年Actual_popu=-995.7343* 0.087721328+-79361.8638* 0.032321309+4723.1111,计算出实际人口数为2070.6846421731与实际数据中2069相差不到一万。

分析2013年预测值与实际值相差较大的原因可能为:00-13年人口波动变化较快,同时创建出的模型符合大部分的值,但是可能存在偏差,模型正确率并非100%。

利用Weka进行线性回归预测

图10 去除12和13数据后模型

(三)将年份一列删除查看结果

将原始数据中的年份一列删除,并且数据中保留12和13年的数据,重复实验过程,得到新的线性回归模型。与原来的结果相比较并没有变化,因此初步认为所创建的线性回归模型与年份无关。

再次查看模型,可初步认为,此线性模型只与老龄人口占比、老龄人口死亡占比和女性育龄人口占比相关。在00-13年数据下,删除其余列,对最后的模型不会有影响。

 利用Weka进行线性回归预测

图11 去除年份一列后模型

四、实验总结

(一)实验中出现的问题

1、实验结果会随着数据的增加或删除发生变化,比如:去除12和13年的数据和未去除的模型有差异,线性回归模型中的自变量和其系数均会发生变化,但是通过模型所得到的预测值相差并不是特别大。

2、实验中,在加载数据时无法识别到arff文件的文件名,显示为’???’,经查阅相关知识,了解到是文件名的错误,最后得到了改正。

3、最初并未对数据做任何的调整,载入数据时出现中文乱码的情况,后将每一列的属性值改为英文,问题得到了解决。

4、原始数据中有缺失值值,我先后尝试了对数据不进行任何改动和将‘_’改为‘0’两种情况下,所创建的模型。原始数据中的‘_’直接进行线性回归模型创建时,输出的模型非常的长,这是因为weka将原始数据中的短横线识别成了枚举类型的数据,这样就会一一列举缺失项的值,而实验需要的数据是数字类型的。因此需要将‘_’先用0代替,或是先预测出缺失值

(二)实验总结

通过本次实验,初步熟悉了Weka软件的使用,对回归分析尤其是线性回归分析有了一定的认识。了解到线性回归是一个出色的、简单的适用于数值预测的方法,在统计应用领域广泛使用了数十年。当然,线性回归也有缺陷,如果数据呈现非线性关系,线性回归将会找到一条最适合的直线,最适合指最小均方差,而这条线也许并不适合。线性回归可以方便的应用于含有数值属性的分类问题。