打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
聊聊数据分析中常用的“回归算法”及其应用


“大家好,我是李启方!今天聊聊回归算法。

公众号后台回复 “2023” 即可领取最新全套数据分析资料包!

01 什么是回归?

随着计算机技术的不断发展,机器学习在各行各业中得到了广泛的应用。回归算法是机器学习中的重要部分,它可以用于预测数值型的输出结果。在本文中,我们将介绍回归算法的几种分类:线性回归、多项式回归、决策树回归和随机森林回归等,并通过生活中的案例用大白话讲解什么是回归。

在生活中,我们经常需要根据已知数据来预测未知数据的结果。例如,我们可以通过历史房价和房屋面积的关系来预测一套新房子的价格。这个预测过程就是回归。在机器学习中,回归就是根据已知数据来预测数值型的输出结果。

下面我们将介绍几种常见的回归算法,并用简单的语言描述算法原理,最后我们也简单地用Python实现各个回归算法

02 线性回归算法

线性回归是一种常见的回归算法,它的原理是通过寻找最优的直线来拟合数据。这条直线可以用来预测新的数据点。在线性回归中,我们可以通过最小二乘法来确定最优的拟合直线。

算法原理

线性回归是一种用于预测连续变量的统计学习算法。其基本原理是利用输入特征与输出变量之间的线性关系来建立一个预测模型。该模型可以表示为一个线性方程,其中输入特征是自变量,输出变量是因变量。通过训练数据集来确定这个线性方程中的系数,即可以得到一个能够对新的输入数据进行预测的模型。

线性回归的核心是求解最小二乘法。最小二乘法的目标是使模型预测值与真实值之间的误差平方和最小化,即通过最小化残差平方和来获得最佳的拟合直线。为了实现这个目标,我们使用梯度下降算法来优化损失函数,即最小化残差平方和。

案例分析

使用Python中的scikit-learn库中的线性回归算法预测房价。

假设我们有一组房屋面积和价格的数据,我们可以使用线性回归算法来预测房价。我们使用Python中的scikit-learn库来实现。

首先,我们需要导入必要的库并读取数据:

import pandas as pdfrom sklearn.linear_model import LinearRegression
data = pd.read_csv('house_price.csv')X = data.iloc[:, :-1].valuesy = data.iloc[:, -1].values

然后,我们可以使用scikit-learn库中的LinearRegression类来训练模型并进行预测:

model = LinearRegression()model.fit(X, y)
# 预测新的房屋价格new_data = [[100], [150], [200]]print(model.predict(new_data))

03 多项式回归算法

多项式回归算法是一种基于线性回归的算法,在线性回归基础上增加多项式特征来拟合非线性关系。

算法原理

如果一些数据点不能通过一条直线很好地拟合,也就是说并不是线性关系,我们可以通过添加二次项来拟合这些数据点。多项式回归可以通过添加任意次幂的项来实现,可以更好地拟合非线性关系。

多项式回归算法的原理是将每个特征的幂次方作为一个新的特征,然后使用线性回归算法来拟合这些特征。在实践中,我们可以使用Scikit-learn库中的PolynomialFeatures类来创建多项式特征。在这个类中,我们可以指定多项式的最高次数,然后将原始特征转换为多项式特征,最后使用线性回归算法来训练模型。

案例分析

我们以一个销售量预测为例,假设我们有以下数据:

数据中包含了每个产品的广告费用和对应的销售量。我们希望通过多项式回归算法预测未来的销售量。首先,我们使用PolynomialFeatures类将原始特征转换为二次多项式特征:

import pandas as pdimport numpy as npfrom sklearn.preprocessing import PolynomialFeaturesfrom sklearn.linear_model import LinearRegression
# Load datadata = pd.read_csv('sales_data.csv')
# Create X and yX = data[['ad_spend']]y = data['sales']
# Create polynomial featurespoly = PolynomialFeatures(degree=2)X_poly = poly.fit_transform(X)
# Fit linear regression modelmodel = LinearRegression()model.fit(X_poly, y)
# Predict sales for new ad spendnew_ad_spend = [[500]]new_ad_spend_poly = poly.transform(new_ad_spend)new_sales = model.predict(new_ad_spend_poly)
print(f'Predicted sales for new ad spend: {new_sales[0]}')

在上面的代码中,我们使用了Pandas库来加载数据,并将广告费用和销售量分别存储在X和y中。然后,我们创建一个PolynomialFeatures对象,将X转换为二次多项式特征,并将结果存储在X_poly中。接下来,我们使用LinearRegression类来训练模型,并使用predict()方法预测新的销售量。

04 决策树回归算法

决策树回归算法是一种基于决策树的回归算法。与分类问题类似,决策树回归也是建立一棵树来预测输出结果。不同之处在于,分类问题的决策树每个叶子节点表示一个类别,而回归问题的决策树每个叶子节点表示一个数值。

算法原理

决策树回归算法的基本原理是通过选择最佳的划分属性和划分点将数据集划分为多个子集,使得每个子集内数据的输出结果尽可能相似。划分属性和划分点的选择是通过计算每个属性对数据集的信息增益或信息增益比来完成的。

信息增益是指在已知某个属性的情况下,数据集的无序性减少的程度。信息增益越大,说明使用该属性划分可以使得数据集的无序性减少得更多。信息增益比则是在信息增益的基础上,考虑属性本身带来的信息量,避免了选择取值数目较多的属性的倾向。

当决策树建立完成后,对于新的样本,通过从根节点开始依次比较该样本的属性值和决策树中的划分点,直到找到相应的叶子节点。叶子节点的输出结果即为该样本的预测值。

案例分析

本案例将使用决策树回归算法预测股票价格。数据集包含了20个股票的基本面数据和对应的股票价格。

首先,加载数据集并划分为训练集和测试集。

import pandas as pdfrom sklearn.model_selection import train_test_split
data = pd.read_csv('stock.csv')X = data.drop(['price'], axis=1)y = data['price']X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

接着,使用scikit-learn库中的DecisionTreeRegressor类创建决策树回归模型,并训练模型。

from sklearn.tree import DecisionTreeRegressor
model = DecisionTreeRegressor(random_state=42)model.fit(X_train, y_train)
# 最后,使用测试集评估模型的性能。from sklearn.metrics import r2_score
y_pred = model.predict(X_test)r2_score(y_test, y_pred)

运行结果就可以计算出r2_score,通过该指标可以说明决策树回归算法对该数据集的预测性能的优劣。

05 随机森林回归

随机森林回归是一种基于决策树的集成学习算法,它是由多个决策树组成的模型,通过对每个决策树的预测结果进行平均或加权平均,得到最终的预测结果。随机森林是一种强大的回归算法,它具有高准确度、抗噪声能力强、对缺失数据不敏感、可处理大量数据等优点,因此被广泛应用于各个领域的预测任务。

算法原理

随机森林回归算法的原理与决策树回归算法类似,不同之处在于随机森林中使用的是多个决策树,且每个决策树都是在随机样本和随机特征的基础上构建的。具体地,随机森林的构建过程如下:

  • 从样本集中随机抽取一定数量的样本,作为训练集。
  • 从特征集中随机选择一部分特征,用于构建决策树。
  • 构建多个决策树,每个决策树都是在上述步骤的基础上构建的。
  • 对于新的样本,使用每个决策树进行预测,得到多个预测结果。
  • 对多个预测结果进行平均或加权平均,得到最终的预测结果。

案例分析

假设我们有过去几年的气温数据,我们希望根据这些数据来预测未来一周的气温。首先,我们需要导入数据并对数据进行预处理,包括数据清洗、特征选择和特征缩放等。这里我们使用Python中的pandas和scikit-learn库来实现数据处理过程。

# 导入需要的库和模块import pandas as pdfrom sklearn.ensemble import RandomForestRegressorfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import mean_squared_error
# 读取数据data = pd.read_csv('temperature.csv')
# 分离特征和标签X = data.drop('temperature', axis=1)y = data['temperature']
# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 构建随机森林回归模型rf = RandomForestRegressor(n_estimators=100, max_features='sqrt', random_state=42)
# 训练模型rf.fit(X_train, y_train)
# 预测测试集y_pred = rf.predict(X_test)
# 评估模型rmse = mean_squared_error(y_test, y_pred, squared=False)print('随机森林回归模型的RMSE:', rmse)
# 查看特征重要性importances = pd.Series(rf.feature_importances_, index=X.columns)importances_sorted = importances.sort_values()importances_sorted.plot(kind='barh', color='lightgreen')plt.title('Feature Importance')plt.show()

这段代码首先导入需要的库和模块,然后使用Pandas库读取气温数据。接着,我们将数据分离为特征和标签,并使用train_test_split函数将数据划分为训练集和测试集。然后,我们使用RandomForestRegressor类构建随机森林回归模型,并将模型训练于训练集上。最后,我们使用模型在测试集上进行预测,并使用mean_squared_error函数计算预测结果和真实结果之间的均方根误差(RMSE),通过这些指标表征模型的预测性能。

06 总结

通过本文的介绍,我们了解了机器学习中的回归算法,包括线性回归、多项式回归、决策树回归和随机森林回归。这些算法可以通过训练模型来预测未来的数值型数据,因此在许多实际应用中被广泛使用。

在实际使用这些算法时,需要根据数据特点和应用场景选择不同的算法。线性回归适用于简单的线性关系,而多项式回归可以处理更复杂的曲线关系。决策树回归可以捕捉非线性关系,同时也可以处理缺失数据,但容易过拟合。随机森林回归在处理高维数据和大量数据时表现优秀,同时可以有效地避免过拟合

在使用这些回归算法时,需要注意一些问题。首先,过拟合是回归算法中常见的问题。过拟合的主要原因是模型复杂度过高,而样本数量不足。因此,在训练模型时,需要使用交叉验证等方法评估模型的泛化能力,并选择合适的正则化方法来控制模型的复杂度。另外,在数据预处理时,需要注意特征的标准化和归一化,以及异常值的处理,这些都会影响模型的效果。

总的来说,每种算法都有其适用的场景和优缺点,需要结合具体的应用场景进行选择。在使用算法时,还需要对数据进行预处理,包括缺失值填充、特征缩放、特征选择等,以提高算法的预测能力和鲁棒性。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
哪个才是解决回归问题的最佳算法?线性回归、神经网络还是随机森林?
从模型选择到超参调整,六步教你如何为机器学习项目选择算法
一文了解机器学习知识点及其算法(附python代码)
给初学者的十大机器学习算法
你必须熟练掌握的机器学习十大算法
流行的机器学习算法总结,帮助你开启机器学习算法学习之旅
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服