使用Python机器学习中的回归模型

Tavish Aggarwal.

I先前的文章 Python监督学习的k-最近邻域算法,我们探索了监督学习,我们还看到了k最近邻算法来解决分类模型类型问题。

在这篇文章中,我们将探索将用于解决回归模型问题的算法(我们将使目标变量作为连续变量)。

让我们开始吧。

线性回归

是我们尝试绘制一条线的技术,以确保残差的平方和最小值,这被称为损耗功能或OLS(普通最小二乘回归)。我强烈建议在通过这篇文章之前了解线性回归。

Assuming, we know how to create a linear Regression for y = ax + b, where we have a single target value and a single feature. But what if we have more than one feature, for e.g. y= ax1 + ax2 + . . . . + axn + b, in this case, we use scikit-learn Linear Regression model.

# Import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression

boston = load_boston()

# Create feature and target arrays
X = boston.data
y = boston.target

# Split into training and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state=42)

reg = LinearRegression()

reg.fit(X_train, y_train)

print(reg.score(X_train, y_train))

在上面所示的示例中,我们正在使用LineArregression模型来解决问题。

进步!现在我们可以将数据拆分为培训和测试数据,我们也知道如何符合数据并计算模型的性能。

但等待,拆分数据,我们需要确保我们以正确的方式做到这一点。如果所有极端值都处于测试数据中,那么在培训数据中的测试数据是什么?模型的性能将大幅下降。

为了解决以正确的方式拆分数据的问题,我们使用交叉验证。

交叉验证

使用交叉验证我们使用k折叠交叉验证,我们将数据拆分为n折。在一次,我们使用N-1折叠训练和1折来测试数据。

除非我们用每一个折叠测试我们的模型,否则我们会做这个过程。

# Import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression

boston = load_boston()

# Create feature and target arrays
X = boston.data
y = boston.target

# Split into training and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state=42)

reg = LinearRegression()

cv_scores = cross_val_score(reg, X, y, cv=5)

print(cv_scores)

笔记:  更多折叠意味着需要更多的计算能力。它将导致费用上升。选择折叠时要小心。

正规的回归

使用如线性回归中所述的损耗函数,我们倾向于选择每个特征变量的系数。当我们在数据集中具有大量特征时,在这种情况下,在这种情况下,所得到的模型将导致过度拟合。

在这样的场景中,我们需要更改丢失功能以预测正确的结果。改变损耗函数的过程称为正则化。

有各种类型的正则化回归:

  1. Ridge回归
  2. 套索回归

让我们详细讨论它们。

Ridge回归

Ridge回归是回归的地方,

LOS函数= OLS丢失函数+ alpha *每个特征变量系数的平方的总和

这也称为L2正则化,因为正则化术语是系数的L2标准。

笔记: Alpha是我们在此处选择的变量。我们基本上做HyperParameter调整以选择变量。

考虑下面显示的示例,以在Scikit-学习包中执行ridge回归:

# Import necessary modules
from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston

boston = load_boston()

# Create feature and target arrays
X = boston.data
y = boston.target

# Split into training and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state=42)

# Create a ridge regressor: ridge
ridge = Ridge(alpha=0.5, normalize=True)

ridge.fit(X_train, y_train)

ridge_pred = ridge.predict(X_test)

ridge.score(X_test, y_test)

y_pred = ridge.predict(X_test)

plt.scatter(y_test, y_pred)
plt.xlabel("Actual Price")
plt.ylabel("Predicted prices")

输出

使用Python机器学习中的回归模型

在这里,我们正在绘制实际价格与预测价格的曲线。理想情况下,曲线应该是线性直线,但随着我们的模型性能而不是100%存在一些偏差。

套索回归

套索回归是回归,

LOS函数= OLS丢失函数+ alpha *每个变量系数的总和的绝对值

这也称为L1正则化,因为正则化术语是系数的L1标准。

考虑下面显示的示例以在Scikit-Learn包中执行套索回归:

# Import Lasso
from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston

boston = load_boston()

# Create feature and target arrays
X = boston.data
y = boston.target

# Split into training and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state=42)

lasso = Lasso(alpha=0.4, normalize=True)
df_columns = boston.feature_names

lasso.fit(X,y)

# Compute and print the coefficients
lasso_coef = lasso.coef_
print(lasso_coef)

# Plot the coefficients of each feature
plt.plot(range(len(df_columns)), lasso_coef)
plt.xticks(range(len(df_columns)), df_columns, rotation=60)
plt.margins(0.02)
plt.show()

笔记:

  1. 使用套索回归我们可以选择对我们模型产生重大影响的功能。
  2. 套索回归是选择功能的好选择,但要创建回归模型脊回归应该是理想的选择。
  3. 我们应该执行ridge回归而不是执行线性回归。

概括

在此帖子中,我们学习了如何使用线性回归解决回归模型问题。掌握线性回归后,我们了解了正规化的回归。我们使用两种类型的正则化回归解决了数据集:RIDGE回归和套索回归。

锄头这篇文章对你有帮助,我鼓励你解决几个数据集并掌握回归技术。

作者信息

Tavish Aggarwal.

网站: http://tavishaggarwal.com

Tavish Aggarwal.是一个数据科学家 在一个海德拉巴工作,具有广泛的经验,在跨电子商务,财务,医疗保健等等不同领域解决现实世界的业务问题。 他对技术充满热情,喜欢在团队中工作。