线性回归:Sklearn与Excel

大约13年前 , DavidCournapeau的Scikitlearn作为GoogleSummerofCode项目的一部分开始 。 随着时间的推移 , Scikitlearn成为Python中最著名的机器学习库之一 。 它提供了几种分类、回归和聚类算法 , 在我看来 , 它的关键优势是与Numpy、Pandas和Scipy无缝集成 。
【线性回归:Sklearn与Excel】在excel中 , 我们没有太多的东西可以调整回归算法 。 为了公平比较 , 我将使用默认参数训练sklearn回归模型 。
目的此比较旨在了解excel和Scikitlearn中线性回归的预测精度 。 另外 , 我将简要介绍在excel中执行线性回归的过程 。
示例数据文件为了进行比较 , 我们将使用10万个降水量、最低温度、最高温度和风速的数据集 。 工作人员在8年中的每一天进行测量多次从而得到了这些数据 。
我们将利用降水量、最低气温和最高气温来预测风速 。 因此 , 风速是因变量 , 其他数据是自变量 。
提示:如果看不到“数据分析”选项 , 请单击File>Options>Add-ins 。 选择“AnalysisToolPak”并单击“Go”按钮 , 如下所示
我们需要选中复选框“Label” , 因为示例数据中的第一行有变量名 。
Excel进行计算 , 并以良好的格式显示信息 。 在我们的例子中 , excel可以拟合R方为0.953的线性回归模型 。 考虑到训练数据集中的100000条记录 , excel在不到7秒的时间内执行了线性回归 。 与其他统计信息一起 , 它还显示了不同自变量的截距和系数 。
风速=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
第1步-我们将导入要用于分析的包 。 独立变量的值分布在不同的值范围内 , 并且不是标准正态分布的 , 因此我们需要StandardScaler来实现自变量的标准化 。
fromsklearn.preprocessingimportStandardScalerfromsklearn.linear_modelimportLinearRegressionfromsklearn.metricsimportr2_scoreimportpandasaspdimportnumpyasnpimportmatplotlib.pyplotasplt第2步-将训练数据和测试数据分别从excel文件读取到PandasDataframe作为训练数据和测试数据 。
Training_data=https://pcff.toutiao.jxnews.com.cn/p/20200828/pd.read_excel(“Weather.xlsx”,sheet_name=”Sheet1")Test_data=https://pcff.toutiao.jxnews.com.cn/p/20200828/pd.read_excel(“WeatherTest.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第5步-现在我们将分别输入独立和因变量数据 , 即X_train和y_train , 以训练线性回归模型 。 出于本文开头提到的原因 , 我们将使用默认参数执行模型拟合 。
reg=LinearRegression().fit(X_train,y_train)print("TheLinearregressionscoreontrainingdatais",round(reg.score(X_train,y_train),2))训练数据的线性回归得分与我们用excel观察到的结果一致 。
predict=reg.predict(X_test)从预测风速值和残差散点图可以看出 , Sklean预测值更接近实际值 。
另一方面 , excel确实预测了类似sklearn的风速值范围 。 如果一个近似的线性回归模型对你的商业案例来说足够好的话 , 那么快速预测方面excel是一个不错的选择 。


    推荐阅读