0

    excel和Scikit中线性回归的预测精度:

    1年前 | admin | 128次围观

    作者|Kaushik Choudhury

    编译|VK

    来源|Towards Data Science

    大约13年前,David Cournapeau的Scikit learn作为Google Summer of Code项目的一部分开始。随着时间的推移,Scikit learn成为Python中最著名的机器学习库之一。它提供了几种分类、回归和聚类算法,在我看来matlab svm预测风速和误差 代码,它的关键优势是与Numpy、Pandas和Scipy无缝集成。

    在本文中,我将用excel比较Scikit-learn多元线性回归的预测精度。Scikit-learn提供了许多参数(称为估计器(estimator)的超参数)来微调模型的训练并提高预测的准确性。

    在excel中,我们没有太多的东西可以调整回归算法。为了公平比较,我将使用默认参数训练sklearn回归模型。

    目的

    此比较旨在了解excel和Scikit learn中线性回归的预测精度。另外,我将简要介绍在excel中执行线性回归的过程。

    示例数据文件

    为了进行比较,我们将使用10万个降水量、最低温度、最高温度和风速的数据集。工作人员在8年中的每一天进行测量多次从而得到了这些数据。

    我们将利用降水量、最低气温和最高气温来预测风速。因此,风速是因变量,其他数据是自变量。

    我们将首先在excel上建立和预测风速的线性回归模型。然后我们将使用Scikit learn进行相同的练习,最后,我们将比较预测结果。

    svm算法 matlab代码_matlab svm预测风速和误差 代码_svm分类器matlab代码

    要在excel中执行线性回归,我们将打开示例数据文件并单击excel功能区中的“Data”选项卡。在“Data”选项卡中,选择数据分析选项。

    提示:如果看不到“数据分析”选项,请单击 File > Options> Add-ins。选择“AnalysisToolPak”并单击“Go”按钮,如下所示

    单击“Data Analysis”选项matlab svm预测风速和误差 代码,将打开一个弹出窗口,显示excel中可用的不同分析工具。我们将选择Regression回归,然后单击“OK”。

    将显示另一个弹出窗口。“Input Y range字段中填写风速(因变量)的Excel单元格参考。在“Input X Range”中,我们将为独立变量(即降水量、最低温度和最高温度)提供单元参考。

    我们需要选中复选框“Label”,因为示例数据中的第一行有变量名。

    在指定数据后单击“确定”按钮,excel将建立一个线性回归模型。你可以将其视为Scikit learn中的训练(fit 函数)。

    Excel进行计算,并以良好的格式显示信息。在我们的例子中,excel可以拟合R方为0.953的线性回归模型。考虑到训练数据集中的100000条记录,excel在不到7秒的时间内执行了线性回归。与其他统计信息一起,它还显示了不同自变量的截距和系数。

    基于excel线性回归输出,我们可以把下面的数学关系组合起来。

    风速=2.438+(降水量*0.026)+(最小温度*0.393)+(最大温度*0.395)

    我们将用这个公式来预测测试数据集的风速,测试集数据是excel没有用于训练的数据。

    例如,对于第一个测试数据集,风速=2.438+(0.51*0.026)+(17.78*0.393)+(25.56*0.395)=19.55

    此外,我们还计算了预测的残差并绘制了图,以了解其趋势。我们可以看到,在几乎所有的情况下,风速预测值都低于实际值,而风速越快,预测的误差就越大。

    让我们在Scikit learn中钻研线性回归。

    第1步-我们将导入要用于分析的包。独立变量的值分布在不同的值范围内,并且不是标准正态分布的,因此我们需要StandardScaler来实现自变量的标准化。

    from sklearn.preprocessing import StandardScaler
    from sklearn.linear_model import LinearRegression
    from sklearn.metrics import r2_score
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    

    第2步-将训练数据和测试数据分别从excel文件读取到PandasDataframe作为训练数据和测试数据。

    Training_data=pd.read_excel(“Weather.xlsx”, sheet_name=”Sheet1") 
    Test_data=pd.read_excel(“Weather Test.xlsx”, sheet_name=”Sheet1") 
    

    在本文中,我将不着重于初步的数据质量检查,如空白值、离群值等以及相应的校正方法

    第3步-在下面的代码中,我们声明了除“风速”外的所有列数据为自变量,只有“风速”作为因变量用于训练和测试数据。请注意,我们不会使用“SourceData_test_dependent”进行线性回归,而是将预测值与其进行比较。

    SourceData_train_independent= Training_data.drop(["WindSpeed"], axis=1) # 从训练数据集中删除WindSpeed变量
    SourceData_train_dependent=Training_data["WindSpeed"].copy() #  训练数据集只有自变量
    SourceData_test_independent=Test_data.drop(["WindSpeed"], axis=1)
    SourceData_test_dependent=Test_data["WindSpeed"].copy()
    

    第4步-由于独立变量的范围是完全不同的,因此我们需要调整它以避免有些变量范围大,有些变量范围小导致的性能影响。在下面的代码中,自变量被缩放,并分别保存到X-train和X_test。在y_train中,相关训练变量被保存而不缩放。

    sc_X = StandardScaler()
    X_train=sc_X.fit_transform(SourceData_train_independent.values) #缩放自变量
    y_train=SourceData_train_dependent # 因变量不需要缩放
    X_test=sc_X.transform(SourceData_test_independent)
    y_test=SourceData_test_dependent
    

    matlab svm预测风速和误差 代码_svm算法 matlab代码_svm分类器matlab代码

    第5步-现在我们将分别输入独立和因变量数据,即X_train 和y_train ,以训练线性回归模型。出于本文开头提到的原因,我们将使用默认参数执行模型拟合。

    reg = LinearRegression().fit(X_train, y_train)
    print("The Linear regression score on training data is ", round(reg.score(X_train, y_train),2))
    

    训练数据的线性回归得分与我们用excel观察到的结果一致。

    第6步-最后,我们将根据测试集预测风速。

    predict=reg.predict(X_test)
    

    从预测风速值和残差散点图可以看出,Sklean预测值更接近实际值。

    将Sklearn和Excel残差并行比较,可以看出随着风速的增加,模型与实际值的偏差都比较大,但Sklearn比Excel好。

    另一方面,excel确实预测了类似sklearn的风速值范围。如果一个近似的线性回归模型对你的商业案例来说足够好的话,那么快速预测方面excel是一个不错的选择。

    Excel可以在与sklearn相同的精度水平上执行线性回归预测。因为sklearn可以通过对参数的微调,可以大幅度提高sklearn线性回归预测精度,并且更适合处理复杂模型。对于快速和近似的预测,excel是一个非常好的选择,具有可接受的精确度。

    原文链接:

    欢迎关注磐创AI博客站:

    sklearn机器学习中文官方文档:

    欢迎关注磐创博客资源汇总站:

    发表评论