机器学习中,回归算法用于预测连续型变量的值。在这篇文章中,我将为大家介绍一些常用的回归算法及其优缺点。

线性回归(Linear Regression)

线性回归是最基本的回归算法之一,它通过线性组合来建立输入变量和输出变量之间的关系。它非常适用于特征之间具有线性关系的问题。线性回归的优点是简单易懂、计算速度快,但它对于输入特征的要求比较高,对于非线性关系的数据表现不佳。

多项式回归(Polynomial Regression)

多项式回归是线性回归的拓展,它通过给输入变量添加高次项来拟合非线性关系。多项式回归可以适用于更复杂的数据集,但容易出现过拟合的问题。

岭回归(Ridge Regression)

岭回归是一种改进的线性回归算法,它通过对回归系数加上L2正则化项来防止过拟合。这样可以使得每个特征对模型的影响更加平均,避免某些特征对模型的影响过大。岭回归对于数据噪声较大的情况表现更好。

Lasso回归(Lasso Regression)

Lasso回归是一种类似于岭回归的算法,它采用L1正则化项来约束回归系数。与岭回归不同的是,Lasso回归可以将某些回归系数压缩为0,从而实现自动特征选择和降维,因此适用于具有大量特征但只有部分特征对输出变量有贡献的情况。

决策树回归(Decision Tree Regression)

决策树回归通过将输入数据划分为多个区域来拟合输入和输出之间的关系。它对于非线性问题的拟合效果比较好,并且可以进行可视化展示,非常易于理解。但是,决策树容易过拟合,在处理高维数据时会出现问题。

随机森林回归(Random Forest Regression)

随机森林回归是由多个决策树构成的集成算法,通过投票的方式来决定最终的预测结果。它不容易过拟合,同时也避免了决策树的某些问题。随机森林对于噪声和异常值的鲁棒性较好,同时也可以处理高维数据集。

在实际应用中,不同的回归算法因具体应用场景和数据而异,需要根据实际情况进行选择和调优。掌握这些常用的回归算法是机器学习初学者必备的技能。 以下是详细地示例

线性回归(Linear Regression)

线性回归是最基本的回归算法之一,它通过线性组合来建立输入变量和输出变量之间的关系。它非常适用于特征之间具有线性关系的问题。线性回归的优点是简单易懂、计算速度快,但它对于输入特征的要求比较高,对于非线性关系的数据表现不佳。

Python代码

import pandas as pd

from sklearn import datasets, linear_model

diabetes = datasets.load_diabetes()

df = pd.DataFrame(diabetes.data, columns=diabetes.feature_names)

regr = linear_model.LinearRegression()

regr.fit(df[[‘age’, ‘bmi’]], diabetes.target)

print(‘Coefficients: \n’, regr.coef_)

R语言代码

线性回归(Linear Regression)

library(datasets)

diabetes <- data.frame(x=c(1,2,3,4,5), y=c(5,2,7,8,9))

fit <- lm(diabetes y   d i a b e t e s y ~ diabetes y diabetesx)

summary(fit)

fit <- lm(diabetes y   d i a b e t e s y ~ diabetes y diabetesx)

summary(fit)

多项式回归(Polynomial Regression)

多项式回归是线性回归的拓展,它通过给输入变量添加高次项来拟合非线性关系。多项式回归可以适用于更复杂的数据集,但容易出现过拟合的问题。

Python代码

import numpy as np

import matplotlib.pyplot as plt

from sklearn.linear_model import LinearRegression

from sklearn.preprocessing import PolynomialFeatures

boston = datasets.load_boston()

x = boston.data[:, [12]]

y = boston.target.reshape(-1, 1)

poly_features = PolynomialFeatures(degree=2, include_bias=False)

X_poly = poly_features.fit_transform(x)

lin_reg = LinearRegression()

lin_reg.fit(X_poly, y)

plt.scatter(x, y, color=‘gray’)

plt.plot(x, lin_reg.predict(poly_features.fit_transform(x)), color=‘red’, linewidth=2)

plt.show()

R语言代码

多项式回归(Polynomial Regression)

library(MASS)

library(datasets)

data(“Boston”)

Boston <- data.frame(Boston)

fit <- lm(medv ~ lstat + I(lstat^2), data = Boston)

summary(fit)

岭回归(Ridge Regression)

岭回归是一种改进的线性回归算法,它通过对回归系数加上L2正则化项来防止过拟合。这样可以使得每个特征对模型的影响更加平均,避免某些特征对模型的影响过大。岭回归对于数据噪声较大的情况表现更好。

Python代码

from sklearn.linear_model import Ridge

from sklearn.model_selection import train_test_split

from sklearn.feature_selection import RFE

boston = datasets.load_boston()

X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2)

selector = RFE(estimator=Ridge(alpha=1.0), n_features_to_select=5, step=1)

selector.fit(X_train, y_train)

print(selector.ranking_)

R语言代码

岭回归(Ridge Regression)

library(Matrix)

library(mlbench)

data(“BostonHousing”)

BostonHousing$medv[sample(1:nrow(BostonHousing), nrow(BostonHousing)/2)] <- NA

BostonHousing <- na.omit(BostonHousing)

model <- glm(medv ~ ., data = BostonHousing, family = gaussian, weight = 1)

fit <- glmnet(as.matrix(model m o d e l [ m o d e l model[model model[modelwhich[,1],-1]), model m o d e l [ m o d e l model[model model[modelwhich[,1],1], lambda = 1)

Lasso回归(Lasso Regression)

Lasso回归是一种类似于岭回归的算法,它采用L1正则化项来约束回归系数。与岭回归不同的是,Lasso回归可以将某些回归系数压缩为0,从而实现自动特征选择和降维,因此适用于具有大量特征但只有部分特征对输出变量有贡献的情况。

Python代码

from sklearn.linear_model import Lasso

from sklearn.datasets import load_boston

from sklearn.preprocessing import StandardScaler

boston = load_boston()

X = boston.data

y = boston.target

scaler = StandardScaler()

X = scaler.fit_transform(X)

lasso = Lasso(alpha=0.1)

lasso.fit(X, y)

print(lasso.coef_)

R语言代码

Lasso回归(Lasso Regression)

library(datasets)

data(“mtcars”)

fit <- lm(mpg ~ ., data = mtcars)

library(glmnet)

fit <- glmnet(as.matrix(mtcars[, -1]), mtcars[, 1], alpha = 1)

决策树回归(Decision Tree Regression)

决策树回归通过将输入数据划分为多个区域来拟合输入和输出之间的关系。它对于非线性问题的拟合效果比较好,并且可以进行可视化展示,非常易于理解。但是,决策树容易过拟合,在处理高维数据时会出现问题。

Python代码

import numpy as np

from sklearn.tree import DecisionTreeRegressor

from sklearn.datasets import load_boston

from sklearn.metrics import mean_squared_error

import matplotlib.pyplot as plt

boston = load_boston()

X = boston.data[:, [5]]

y = boston.target.reshape(-1, 1)

tree_reg = DecisionTreeRegressor(max_depth=2)

tree_reg.fit(X, y)

y_pred = tree_reg.predict(X)

mse = mean_squared_error(y, y_pred)

print('Mean squared error: ', mse)

plt.scatter(X[:,0], y, color=‘gray’)

plt.plot(X[:,0], y_pred, color=‘red’, linewidth=2)

plt.show()

R语言代码

决策树回归(Decision Tree Regression)

library(rpart)

library(rpart.plot)

data(“Boston”)

Boston <- data.frame(Boston)

fit <- rpart(medv~., data=Boston, method=“anova”, minsplit=5)

printcp(fit)

rpart.plot(fit)

随机森林回归(Random Forest Regression)

随机森林回归是由多个决策树构成的集成算法,通过投票的方式来决定最终的预测结果。它不容易过拟合,同时也避免了决策树的某些问题。随机森林对于噪声和异常值的鲁棒性较好,同时也可以处理高维数据集。

Python代码

from sklearn.ensemble import RandomForestRegressor

from sklearn.datasets import load_boston

boston = load_boston()

X = boston.data

y = boston.target

rf = RandomForestRegressor(n_estimators=500, random_state=0)

rf.fit(X, y)

importances = rf.feature_importances_

std = np.std([tree.feature_importances_ for tree in rf.estimators_], axis=0)

indices = np.argsort(importances)[::-1]

plt.bar(range(X.shape[1]), importances[indices],

color=“r”, yerr=std[indices], align=“center”)

plt.xticks(range(X.shape[1]), indices)

plt.show()

R语言代码

#随机森林回归(Random Forest Regression

library(mlbench)

data(“BostonHousing”)

BostonHousing <- data.frame(BostonHousing)

library(randomForest)

fit <- randomForest(medv ~ ., data=BostonHousing, ntree=500, importance=TRUE)

varImpPlot(fit)

  1. List item

更多推荐