集成学习方法之随机森林
随机森林(Random Forest)是一种集成学习方法,它通过构建多个决策树并将它们的结果结合起来以提高整体模型的性能和准确性。随机森林是一种强大的分类和回归工具,它的核心思想是“集思广益”,即通过组合多个模型的预测来获得比单个模型更好的性能。
随机森林的工作原理:
-
构建多棵决策树:随机森林通过自助采样从训练数据集中为每棵树生成不同的训练集。
-
引入随机特征选择:在每个决策节点,随机选择一部分特征,然后选择最佳分割特征。
-
构建决策树:每棵树都尽可能地生长,直到达到预设的条件,如最大深度或节点中的最小样本数。
-
聚合结果:对于分类问题,随机森林通过多数投票的方式来确定最终的类别;对于回归问题,则通过平均多棵树的预测结果来得到最终预测。
API
from sklearn.ensemble import RandomForestClassifier
RandomForestClassifier
类的一些常用参数:
n_estimators
:森林中树的数量。默认值通常是 100。criterion
:用于评估分割质量的函数。对于分类问题,可以使用 "gini" 或 "entropy"。max_depth
:树的最大深度。如果设置为None
,则树会完全生长。min_samples_split
:分割内部节点所需的最小样本数。min_samples_leaf
:叶节点所需的最小样本数。max_features
:寻找最佳分割时要考虑的特征数量。bootstrap
:是否使用自助采样。oob_score
:是否使用袋外样本来评估generalization accuracy。random_state
:控制随机数生成器的种子。
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
wine = load_wine()
#划分数据集
x_train, x_test, y_train, y_test = train_test_split(wine.data, wine.target, test_size=0.2, random_state=10)
#标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
#创建决策树实例
estimator = RandomForestClassifier ()
estimator.fit(x_train, y_train)
#模型评估
print(estimator.score(x_test, y_test))
线性回归
线性回归(Linear Regression)是统计学中用来预测连续变量之间关系的一种方法,尤其是预测输入变量(自变量)和输出变量(因变量)之间的线性关系。
损失函数(Loss Function)
也称为代价函数或目标函数,是衡量模型预测值与实际值差异的函数。在机器学习中,损失函数是一种评估模型性能的工具,用于指导模型的学习过程。模型的训练过程通常是最小化损失函数的过程,即通过调整模型参数来减少预测值和真实值之间的差异。
多参数回归
也称为多元线性回归(Multiple Linear Regression),是线性回归的一种扩展,它涉及两个或两个以上的自变量(特征)和一个因变量(目标变量),并试图找到这些自变量和因变量之间的线性关系。
最小二乘法(Least Squares Method)
是一种数学优化技术,它通过最小化误差的平方和来寻找数据的最佳函数匹配。在统计学中,最小二乘法常用于线性回归模型的参数估计,其中均方误差(Mean Squared Error, MSE)是最小化的主要目标。
链式求导
API
from sklearn.linear_model import LinearRegression
LinearRegression()
常用的参数:
- fit_intercept:默认值:
True
如果设置为True
,模型会尝试计算截距(即权重向量中的一个额外维度)。如果设置为False
,则假设数据已经经过中心化处理,模型不会计算截距。 - normalize:默认值:
False
如果设置为True
,则在回归之前,会先对输入变量进行规范化(即减去均值并除以标准差),这有助于提高算法的数值稳定性和性能。 - copy_X:默认值:
True
如果设置为True
,则在fit
方法中,输入数据X
会被复制。如果设置为False
,则fit
方法可能会直接修改X
,这在某些情况下可以节省内存。 - n_jobs:默认值:
None
指定用于交叉验证工作的并行作业数。None
表示1
除非在全局上下文中设置了不同的n_jobs
值。 - positive:默认值:
False
如果设置为True
,则会添加一个线性约束,使得解中的所有系数都是正的。
# 导入必要的库
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.model_selection import train_test_split
# 创建一些示例数据
# 假设我们有一组数据点,它们大致遵循线性关系 y = 2x + 1
np.random.seed(0) # 设置随机种子以便结果可复现
X = np.random.rand(100, 1) * 10 # 生成100个0到10之间的随机数作为特征
y = 2 * X + 1 + np.random.randn(100, 1) * 2 # 生成对应的目标值,加入一些噪声
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建线性回归模型实例
model = LinearRegression()
# 拟合模型
model.fit(X_train, y_train)
# 进行预测
y_pred = model.predict(X_test)
# 评估模型
mse = mean_squared_error(y_test, y_pred) # 计算均方误差
r2 = r2_score(y_test, y_pred) # 计算决定系数 R²
print(f"均方误差(MSE): {mse:.2f}")
print(f"决定系数(R²): {r2:.2f}")
# 获取模型参数
coefficients = model.coef_
intercept = model.intercept_
print(f"模型权重(斜率): {coefficients[0][0]:.2f}")
print(f"模型截距: {intercept[0]:.2f}")
'''
均方误差(MSE): 3.67
决定系数(R²): 0.85
模型权重(斜率): 2.00
模型截距: 1.41
'''