回归建模101:了解不同类型的模型以及如何选择正确的模型
#python #datascience #machinelearning #deeplearning

回归模型是一个统计模型,用于基于一个或多个预测变量预测连续变量。回归模型的目的是确定预测变量和响应变量之间的关系,然后使用该关系根据新数据进行对响应变量的预测。

有几种不同类型的回归模型,包括:

  1. 线性回归:线性回归是一种统计方法,用于建模连续响应变量(也称为因变量)与一个或多个预测变量(也称为自变量)之间的关系。线性回归的目的是确定描述预测变量和响应变量之间关系的最佳拟合线。最好的拟合线是通过找到系数的值(也称为斜率)来确定,该系数的值最小化了预测值和响应变量的观察值之间的平方误差之和。

  2. 多项式回归:多项式回归是一种回归模型,它通过在模型中使用多项式项,可以在预测变量和响应变量之间建立更复杂的关系。例如,可以在模型中包括一个二次项(x^2),以允许不线性的关系。还可以包括高阶多项式项(例如x^3,x^4),以允许更复杂的关系。

  3. 逻辑回归:逻辑回归是一种回归模型,用于预测二进制响应变量(即只能采用两个值的响应变量)。逻辑回归的目的是模拟响应变量在两个值之一(给定预测变量)中的概率。给定模型假设,该模型通过最大化观察到的数据的可能性而拟合。

  4. 多元回归:多元回归是一种回归模型,可在模型中使用多个预测变量。这种类型的模型对于检查多个预测变量与响应变量之间的关系很有用,并且用于识别哪些预测变量对于预测响应变量最重要。

  5. 山脊回归:脊回归是一种回归模型,用于解决线性回归模型中过度拟合。当模型太复杂并且具有太多参数时,会发生过度拟合,从而导致对新数据的概括不佳。脊回归解决了过度拟合,通过将正则化项添加到惩罚大系数的模型中,迫使某些系数接近零。这有助于降低模型的复杂性并提高其概括能力。

  6. 套索回归:拉索回归类似于脊回归,因为它用于解决线性回归模型中的过度拟合。但是,Lasso回归不使用惩罚大系数的正则化项,而是使用正规化项,将某些系数设置为零。这对于识别重要预测变量的子集并消除了模型中重要的变量很少。

  7. 弹性净回归:弹性净回归是一种回归模型,结合了脊和拉索回归的正则化项。这允许模型既可以将某些系数朝零缩小,又要将某些系数精确地设置为零,具体取决于预测变量的相对重要性。

  8. 逐步回归:逐步回归是一种回归模型,用于选择模型最重要的预测变量。该过程涉及根据其统计意义逐渐添加或删除变量,目的是找到最容易解释响应变量的最简约模型。

  9. 多元自适应回归条纹(MARS):火星是一种回归模型,用于模拟预测变量和响应变量之间的复杂,非线性关系。该模型使用分段线性函数来建模关系,并且对于模拟单个线性方程未很好地描述的关系特别有用。

  10. 随机森林回归:随机森林回归是一种使用多个决策树来预测的合奏模型。随机森林中的每个决策树都经过数据的不同子集训练,并根据对该特定树最重要的变量进行预测。最终的预测是通过平均森林中所有决策树的预测来做出的。随机森林回归对于建模复杂的非线性关系特别有用,也可以用于识别重要的预测变量。

总的来说,要使用的回归模型的选择将取决于数据的特征和分析的特定目标。仔细考虑每种类型的回归模型的假设很重要,然后选择最适合当前数据的假设。

现在,我们将以上面列出的模型为例,并使用给定数据训练模型。

1.线性回归

这是使用Python库Scikit-Learn进行线性回归的示例。此示例使用的数据是两个预测​​变量(x1和x2)和一个响应变量(y)的合成数据集。

这是一个可用于线性回归的示例数据集:

x1 x2 y
1 2 4
2 3 6
3 4 8
4 5 10
5 6 12

要将此数据用于线性回归,您只需要将其加载到Pandas DataFrame中,然后按照上一个示例中概述的步骤进行操作。

例如,您可以将数据加载到这样的数据框中:

import pandas as pd

# Load the data into a DataFrame
data = pd.DataFrame({
    "x1": [1, 2, 3, 4, 5],
    "x2": [2, 3, 4, 5, 6],
    "y": [4, 6, 8, 10, 12]
})

首先,我们可以从导入必要的库并加载数据开始:

from sklearn.linear_model import LinearRegression

# Split the data into predictor and response variables
X = data[["x1", "x2"]]
y = data["y"]

接下来,我们可以使用Scikit-Learn的Train_test_split函数将数据分为培训和测试集:

from sklearn.model_selection import train_test_split

# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

现在,我们将数据分为培训和测试集,我们可以创建一个线性回归模型并将其适合培训数据:

# Create a linear regression model
model = LinearRegression()

# Fit the model to the training data
model.fit(X_train, y_train)

最后,我们可以使用该模型对测试数据进行预测,并使用Scikit-Learn的平方误差函数评估模型的性能:

from sklearn.metrics import mean_squared_error

# Make predictions on the test data
y_pred = model.predict(X_test)

# Calculate the mean squared error
mse = mean_squared_error(y_test, y_pred)

print("Mean Squared Error:", mse)

这只是使用Scikit-Learn线性回归的一个基本示例,但是您可以使用许多其他功能和选项来微调模型并改善其性能。

2.多项式回归

这是如何使用Python和Scikit-Learn库进行多项式回归的示例:

这是我们以表格形式使用的示例数据:

x y
1 1
2 4
3 9
4 16
5 25

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

import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression

# Load the data
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([1, 4, 9, 16, 25])

接下来,我们可以使用polyenmialfeatures函数将数据转换为多项式特征:

# Transform the data into polynomial features
poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X)

最后,我们可以使用转换的数据拟合多项式回归模型:

# Fit the polynomial regression model
model = LinearRegression()
model.fit(X_poly, y)

# Make predictions on new data
X_new = np.array([[6], [7], [8]])
X_new_poly = poly.transform(X_new)
y_pred = model.predict(X_new_poly)
print(y_pred)

此代码的输出将是新数据点y值的预测[6,7,8]。

[36。 49. 64。]

请注意,这只是一个简单的示例,实际上,您可能需要执行其他步骤,例如交叉验证和超参数调整以优化模型的性能。

3.逻辑回归

这是使用表格中的示例数据的逻辑回归的示例:

样本数据:

年龄 性别 收入 信用评分 批准贷款
25 男性 $ 50,000 750
30 女性 $ 40,000 700
35 男性 $ 60,000 650
40 女性 $ 70,000 800
45 男性 $ 80,000 850

说明:在此示例中,我们试图预测个人是否会根据其年龄,性别,收入和信用评分批准贷款。响应变量是“批准的贷款”,这是二进制变量(是或否)。预测变量是年龄,性别,收入和信用评分。

使用Python的逻辑回归代码:

# Import necessary libraries
import pandas as pd
from sklearn.linear_model import LogisticRegression

# Load sample data into a Pandas DataFrame
data = pd.DataFrame({'Age': [25, 30, 35, 40, 45],
                     'Gender': ['Male', 'Female', 'Male', 'Female', 'Male'],
                     'Income': [50000, 40000, 60000, 70000, 80000],
                     'Credit Score': [750, 700, 650, 800, 850],
                     'Approved for Loan': ['Yes', 'Yes', 'No', 'Yes', 'No']})

# Create feature matrix (X) and response vector (y)
X = data[['Age', 'Gender', 'Income', 'Credit Score']]
y = data['Approved for Loan']

# Convert categorical variables to dummy variables
X = pd.get_dummies(X)

# Create a logistic regression model
model = LogisticRegression()

# Fit the model to the training data
model.fit(X, y)

# Predict whether a new individual with the following characteristics will be approved for a loan
new_individual = [[30, 1, 40000, 700]]  # age 30, male, income $40,000, credit score 700
prediction = model.predict(new_individual)
print(prediction)  # Output: ['Yes']

说明:在此示例中,我们首先将样本数据加载到熊猫数据框中,然后创建一个特征矩阵(x)和响应向量(y)。然后,我们使用熊猫中的get_dummies函数将分类变量(性别)转换为虚拟变量。接下来,我们使用sklearn库中的LogisticRegression函数创建逻辑回归模型。然后,我们使用fit函数将模型拟合到训练数据,最后使用模型对使用predict函数的新个人进行预测。该模型的输出是预计新个人将被批准用于贷款。

重要的是要注意,这只是逻辑回归的一个基本示例,并且还有许多其他考虑因素和技术可用于改善模型的性能。例如,您可能需要将预测变量归一化,或使用交叉验证来评估模型的性能。您可能还需要考虑使用其他评估指标,例如混淆矩阵或AUC(曲线下的AUC)评分,以评估模型的准确性。

此外,重要的是要仔细考虑逻辑回归的假设,并在使用模型之前确保满足它们。例如,逻辑回归假定预测变量和响应变量的log-odds之间存在线性关系,并且模型中的误差是独立的且正态分布的。如果未达到这些假设,则该模型可能不适合数据。

总的来说,逻辑回归是一种强大且广泛使用的工具,可预测二进制结果,并且可以成为任何数据科学家工具包的宝贵补充。通过仔细考虑数据的特征和模型的假设,您可以使用逻辑回归来做出准确可靠的预测。

4.多元回归

这是使用Python和样本数据以表格形式的python进行多元回归的示例:

销售 广告 价格
1 100 50 10
2 110 55 12
3 120 60 14
4 130 65 16
5 140 70 18

在此示例中,我们试图根据两个预测变量来预测销售(响应变量):广告和价格。我们可以使用以下代码在Python中构建多元回归模型:

import pandas as pd
from sklearn.linear_model import LinearRegression

# read in the data
df = pd.read_csv("sample_data.csv")

# create a Linear Regression model object
model = LinearRegression()

# fit the model using the Advertising and Price columns as predictor variables
# and the Sales column as the response variable
X = df[["Advertising", "Price"]]
y = df["Sales"]
model.fit(X, y)

# view the model coefficients
print(model.coef_)

# view the model intercept
print(model.intercept_)

# view the model R-squared value
print(model.score(X, y))

模型系数的输出将为我们提供每个预测变量对响应变量的估计效果(即,预期响应变量将在预测变量变量中增加多少响应变量)。当所有预测变量等于零时,模型截距的输出将为我们提供响应变量的估计值。模型R平方值的输出将使我们对模型解释响应变量的差异的程度进行衡量。

使用此多元回归模型,我们可以根据广告和价格的新价值对销售进行预测。例如,如果我们想以70美元的广告和20美元的价格预测一年的销售,我们可以使用以下代码:

# create a new data frame with the new values of advertising and price
new_data = pd.DataFrame({"Advertising": [70], "Price": [20]})

# make the prediction
prediction = model.predict(new_data)
print(prediction)

这将根据新数据框中的广告和价格价值为我们提供预测的销售价值。

重要的是要注意,这只是使用Python进行多元回归的一个基本示例,并且还有许多其他考虑因素和技术可能取决于分析的特定目标和数据的特征。多元回归的一些其他注意事项可能包括:

  • 处理丢失的数据:如果数据中存在丢失的值,我们可能需要估算缺失值或使用诸如多重插补的技术来处理丢失的数据。

  • 特征缩放:如果预测变量的比例非常不同,则缩放变量可能是有益的,使它们处于相同的尺度。这可以帮助模型更快地收敛,并可以提高模型的性能。

  • 模型评估:使用适当的指标和技术(例如交叉验证)来评估模型的性能很重要,以确保模型不适合数据。

  • 模型选择:如果有多个潜在的预测变量,我们可能需要选择使用诸如逐步回归或正则化方法等技术中包含在模型中的最重要变量。

总体而言,多元回归是一种强大的工具,用于基于多个预测变量预测连续响应变量,并且可以是任何数据分析工具包的有用补充。

5.山脊回归

这是使用python在样本数据上使用脊回归的示例:

首先,我们可以从导入必要的库开始:

import numpy as np
from sklearn.linear_model import Ridge

接下来,让我们以表格形式定义样本数据:

预测器1 预测器2 响应
1 2 5
3 4 9
5 6 13
7 8 17

然后,我们可以将这些数据转换为ridge回归模型可以使用的数组:

X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
y = np.array([5, 9, 13, 17])

现在,我们可以创建一个脊回归模型并将其拟合到数据:

model = Ridge(alpha=1.0)
model.fit(X, y)

模型中的alpha参数指定要应用的正则化量。较大的α值将导致具有更多正则化的模型,这可以帮助减少过度拟合。

最后,我们可以使用该模型对新数据进行预测:

predictions = model.predict([[9, 10]])
print(predictions)

这将根据给定的预测变量输出带有响应变量预测的数组。在这种情况下,预测为[21]。

总体而言,脊回归是一种有用的工具,用于与一个或多个预测变量建模线性关系,同时也能够解决过度拟合的问题。

6.拉索回归

以下是使用城市中房屋价格的样本数据集进行套索回归的一个示例。目的是根据房屋的大小(平方英尺)和卧室数量来预测房屋的价格。

大小(SQFT) 卧室 价格($)
2,000 3 300,000
1,500 2 200,000
3,000 4 400,000
1,200 3 250,000
2,500 4 350,000

这是用于使用示例数据实现LASSO回归的Python代码:

import pandas as pd
from sklearn.linear_model import Lasso

# Load the data into a pandas DataFrame
df = pd.read_csv('housing_prices.csv')

# Define the predictor variables and the response variable
X = df[['Size (sqft)', 'Bedrooms']]
y = df['Price ($)']

# Fit the lasso regression model to the data
lasso = Lasso(alpha=0.1)
lasso.fit(X, y)

# Make predictions using the lasso model
predictions = lasso.predict(X)

# Print the model's coefficients
print(lasso.coef_)

在此示例中,LASSO模型使用0.1的alpha值适合数据,这决定了正则化项的强度。然后,该模型根据预测变量(卧室的大小和数量)来对响应变量(房价)进行预测。最后,打印了模型的系数,这表明模型中每个预测变量的重要性。

。 在可能存在大量预测变量的情况下,

套索回归很有用,我们只想为模型选择最重要的变量。正则化项有助于缩小较不重要的变量的系数,从而有效地从模型中消除了它们。这可以提高模型的可解释性和概括性。

7.弹性净回归

这是表格形式的示例数据的一个示例:

preditionor_variable_1 preditionor_variable_2 preditionor_variable_3 response_variable
0.5 0.7 0.3 0.6
0.8 0.2 0.9 0.7
0.1 0.5 0.7 0.3
0.3 0.6 0.4 0.5

在此示例中,我们使用弹性净回归来根据三个预测变量来预测响应_varia。 ElasticNet模型中的Alpha参数控制正则化量,L1_ratio参数控制L1和L2正则化项之间的平衡。在此示例中,我们将alpha设置为0.1和L1_ratio为0.5,这意味着该模型将使用L1和L2正则化的组合。然后,使用FIT()方法将模型拟合到训练数据,并使用平均绝对误差来评估模型在测试集上的性能。

首先,我们将从导入必要的库和示例数据开始:

import pandas as pd
from sklearn.linear_model import ElasticNet
from sklearn.model_selection import train_test_split

# load the sample data
data = pd.read_csv('sample_data.csv')

接下来,我们将将数据分为培训集和测试集:

# split the data into a training set and a test set
X = data.drop('response_variable', axis=1)
y = data['response_variable']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

然后,我们将拟合弹性净回归模型与培训数据:

# fit the elastic net model to the training data
model = ElasticNet(alpha=0.1, l1_ratio=0.5)
model.fit(X_train, y_train)

最后,我们可以使用该模型对测试集进行预测并评估其性能:

# make predictions on the test set
predictions = model.predict(X_test)

# evaluate the model's performance
from sklearn.metrics import mean_absolute_error
print(mean_absolute_error(y_test, predictions))

8.逐步回归

这是使用Python中的Scikit-Learn库进行逐步回归的示例:

首先,我们将导入必要的库并生成一些示例数据:

import numpy as np
import pandas as pd
from sklearn.datasets import make_regression

X, y = make_regression(n_samples=100, n_features=10, random_state=0)

这将生成具有10个预测变量和连续响应变量的100个样品。

接下来,我们将将数据分为培训和测试集,并标准化预测变量:

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

现在,我们可以使用Scikit-Learn的StepwiseRegressor类拟合逐步回归模型:

from sklearn.linear_model import StepwiseRegressor

model = StepwiseRegressor(direction='backward', max_iter=5)
model.fit(X_train, y_train)

direction参数指定我们要从模型中添加还是删除变量,而max_iter参数指定逐步选择过程的最大迭代数。

然后,我们可以使用模型对测试集进行预测:

y_pred = model.predict(X_test)

最后,我们可以使用平方误差等指标来评估模型的性能:

from sklearn.metrics import mean_squared_error

mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse:.2f}')

这将在测试集上打印出模型的平方误差。

这是表格形式的数据示例:

预测器1 预测器2 预测器3 预测器4 预测指标5 预测器6 预测器7 预测器8 预测器9 预测器10 响应
0.26 -0.14 -0.13 -0.38 -0.06 -0.33 -0.28 0.44 -0.3 -0.06 -89.77
-0.22 -0.14 -0.11 -0.43 -0.14 -0.23 -0.3 -0.31 -0.28 -0.06 -93.65
0.17 -0.1 -0.17 -0.39 -0.13 -0.37 -0.34 -0.03 -0.3 -0.06 -80.85
-0.34 -0.2 -0.15 -0.34 -0.11 -0.32 -0.29 -0.4 -0.27 -0.06 -102.47
0.34 -0.12 -0.17 -0.34 -0.11 -0.34 -0.27 0.03 -0.3 -0.06 -79.15
-0.13 -0.2 -0.14 -0.41 -0.11 -0.32 -0.29 -0.32 -0.27 -0.06 -96.57
... ... ... ... ... ... ... ... ... ... ...

9.多元自适应回归花纹(火星)

以下是在Python中使用多元自适应回归花纹(MARS)模型的示例:

首先,我们需要安装PY-ARTH软件包,该软件包在Python中提供MARS模型:

pip install py-earth

接下来,我们将导入必要的库并加载示例数据:

import pandas as pd
from pyearth import Earth

# Load sample data from a CSV file
df = pd.read_csv('sample_data.csv')

样本数据可能看起来像这样:

x1 x2 x3 y
5 3 1 7
3 2 4 8
8 1 2 10
2 6 3 9
1 8 6 11

然后,我们可以使用py-earth软件包中的Earth()函数将火星模型拟合到数据:

# Create the MARS model
mars_model = Earth()

# Fit the model to the data
mars_model.fit(df[['X1', 'X2', 'X3']], df['Y'])

然后我们可以使用preadive()函数进行预测:

# Make predictions using the model
predictions = mars_model.predict(df[['X1', 'X2', 'X3']])

最后,我们可以使用诸如平方误差之类的度量标准来评估模型的性能:

from sklearn.metrics import mean_squared_error

# Calculate the mean squared error of the predictions
mse = mean_squared_error(df['Y'], predictions)
print(f'Mean squared error: {mse}')

这是将MARS模型与示例数据一起使用的简单示例,但请记住,该模型对于建模复杂的非线性关系特别有用,因此可能有必要调整模型参数或转换数据为了获得良好的结果。

9.随机森林回归

这是使用python代码表格形式的样本数据的随机森林回归的示例,并说明:

样本数据:

x1 x2 y
1 2 3
2 3 4
3 4 5
4 5 6
5 6 7

说明:在此示例中,我们有一个具有两个预测变量(x1和x2)和一个响应变量(y)的数据集。我们想使用随机的森林回归来建模x1和x2之间的关系,并预测y。

的值。

Python代码:

# Import necessary libraries
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split

# Split the data into training and testing sets
X = [[1,2], [2,3], [3,4], [4,5], [5,6]]
y = [3, 4, 5, 6, 7]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

# Train the model using the training data
model = RandomForestRegressor()
model.fit(X_train, y_train)

# Make predictions on the testing data
y_pred = model.predict(X_test)

# Evaluate the model's performance
score = model.score(X_test, y_test)
print("Model score:", score)

说明:在上面的代码中,我们首先导入必要的库,以随机森林回归并将数据分配为培训和测试集。然后,我们使用train_test_split函数将数据分为培训和测试集。接下来,我们创建一个随机的森林回归模型,并使用拟合功能将其拟合到训练数据中。之后,我们使用模型使用预测函数对测试数据进行预测。最后,我们通过使用分数函数在测试数据上计算得分来评估模型的性能。该代码的输出将是模型的分数,这是模型能够基于预测变量预测响应变量的方法。

如果您喜欢这个帖子,请

Buy Me A Coffee