机器学习12种模型代码

每次输入数据之前记得打印一下数据看是不是读入正确了

0、BMA方法代码

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor

# 生成示例数据
X = np.random.rand(100, 1)  # 特征
y = 2 * X.squeeze() + np.random.randn(100)  # 目标变量

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 定义候选模型集合
models = [
    LinearRegression(),
    DecisionTreeRegressor(max_depth=3)
]

# 训练候选模型
for model in models:
    model.fit(X_train, y_train)

# 计算模型权重(简单均匀权重)
weights = np.ones(len(models)) / len(models)

# 预测结果融合(回归问题,加权平均)
y_pred = np.zeros_like(y_test)
for model, weight in zip(models, weights):
    y_pred += weight * model.predict(X_test)

# 打印预测结果
print("Ensemble prediction:", y_pred)

00 模型进行网格搜索代码

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import Ridge
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import GridSearchCV

# 创建多项式回归模型
model = make_pipeline(PolynomialFeatures(), Ridge())

# 定义超参数的候选值
param_grid = {
    'polynomialfeatures__degree': [2, 3, 4],  # 多项式的阶数
    'ridge__alpha': [0.1, 1.0, 10.0]  # 正则化参数
}

# 创建网格搜索对象
grid_search = GridSearchCV(model, param_grid, cv=5)

# 在训练集上进行网格搜索
grid_search.fit(X_train, y_train)

# 输出最佳超参数组合
print("Best parameters: ", grid_search.best_params_)

# 使用最佳超参数的模型进行预测
y_pred = grid_search.predict(X_test)

1、训练测试集划分

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1786, random_state=42)
# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)

# 预测结果
y_pred = model.predict(X_test)

# 计算R2
r2 = r2_score(y_test, y_pred)
# 计算MSE
mse = mean_squared_error(y_test, y_pred)
# 计算RMSE
rmse = np.sqrt(mse)
#计算MAE
mae = mean_absolute_error(y_test, y_pred)

# 打印结果
print("R2:", r2)
print("MAE:", mae)
print("MSE:", mse)
print("RMSE:", rmse)

2、线性回归模型

from sklearn.metrics import r2_score, mean_squared_error

#超参数
model = LinearRegression(fit_intercept=True, normalize=False, copy_X=True)
  1. fit_intercept(默认为True):指定是否计算截距。如果设置为False,则模型不会计算截距,直线将通过原点。
  2. normalize(默认为False):指定是否对输入特征进行标准化。如果设置为True,则模型会对输入特征进行标准化,使其具有零均值和单位方差。
  3. copy_X(默认为True):指定是否复制输入特征。如果设置为False,则模型会直接对输入特征进行操作,可能会修改原始数据。

3、逻辑回归(logistic regression)

from sklearn.linear_model import LogisticRegression

model = LogisticRegression(penalty='l2', C=1.0, fit_intercept=True, solver='lbfgs', max_iter=100)
  1. penalty:用于指定正则化类型的惩罚项。可以选择的值包括'l1'(L1正则化)、'l2'(L2正则化)和'none'(无正则化)。
  2. C:正则化强度的倒数,控制正则化的力度。较小的C值表示较强的正则化,较大的C值表示较弱的正则化。
  3. fit_intercept(默认为True):指定是否计算截距。如果设置为False,则模型不会计算截距。
  4. solver:用于指定优化算法的求解器。可以选择的值包括'newton-cg''lbfgs''liblinear''sag''saga'
  5. max_iter:最大迭代次数,用于控制优化算法的迭代次数。

4、多项式回归

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import make_pipeline

# 创建多项式回归模型
degree = 2  # 多项式的阶数
model = make_pipeline(PolynomialFeatures(degree), Ridge(alpha))

# 训练模型
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

多项式回归中有几个重要的超参数需要考虑,除了多项式的阶数(degree)之外,还有正则化参数(alpha)和特征选择参数。

  1. 多项式的阶数(degree):多项式回归中,阶数决定了多项式的复杂度。较高的阶数可以更好地拟合非线性关系,但也容易引入过拟合。因此,需要通过交叉验证等方法来选择合适的阶数。
  2. 正则化参数(alpha):在多项式回归中,正则化可以帮助控制模型的复杂度,避免过拟合。正则化参数(如岭回归中的alpha)用于调整正则化的强度。较大的alpha值会增加正则化的影响,降低模型的复杂度。
  3. 特征选择参数:在多项式回归中,可以使用特征选择方法来选择合适的特征子集。例如,可以使用L1正则化(如Lasso回归)来鼓励模型选择重要的特征,从而降低模型的复杂度。

5. LASSO

LASSO(最小绝对收缩和选择算子)通过增加L1正则化来对回归系数进行惩罚,从而实现特征选择和模型稀疏性

from sklearn.linear_model import Lasso

# 创建 LASSO 模型
model = Lasso(alpha=0.1)  # 在这里指定 alpha 值

model.fit(X_train,y_train)
y_pred = model.predict(X_test)
lasso_model = model

e_p(y_test, X_test)

6. DT

from sklearn.tree import DecisionTreeRegressor

# 创建决策树回归模型
model = DecisionTreeRegressor(max_depth= 7, min_samples_split=5)

# 在训练集上拟合模型
model.fit(X_train, y_train)

dt_model = model

e_p(y_train,X_train)
print(' ')
e_p(y_test, X_test)

7. KNR

from sklearn.svm import SVR

# 创建SVR模型
svr_model = SVR(kernel='rbf', random_state=42)

# 在训练集上训练模型
model.fit(X_train, y_train)

svr_model = model

e_p(y_train,X_train)
print(' ')
e_p(y_test, X_test)

8. MLP

from sklearn.neural_network import MLPRegressor

# 创建MLP回归器模型
model = MLPRegressor(hidden_layer_sizes=(10,), activation='tanh', solver='sgd' ,random_state=42,max_iter=5000)

# 在训练集上训练模型
model.fit(X_train, y_train)

mlpr_model = model

e_p(y_train,X_train)
print(' ')
e_p(y_test, X_test)

9.RFR

from sklearn.ensemble import RandomForestRegressor

# 创建MLP回归器模型
model = RandomForestRegressor()

# 在训练集上训练模型
model.fit(X_train, y_train)

rfr_model = model

e_p(y_train,X_train)
print(' ')
e_p(y_test, X_test)

10.XGB

import xgboost as xgb

# 定义XGBoost回归模型
model = xgb.XGBRegressor(n_estimators=100,learning_rate=0.1,max_depth=3,objective='reg:squarederror',random_state=42)

# 在训练集上训练模型
model.fit(X_train, y_train)

xgb_model = model

e_p(y_train,X_train)
print(' ')
e_p(y_test, X_test)

11.GBDT-D(Gradient Boosting with Dropout)

import xgboost as xgb

# 创建一个GBDT-D模型
params = {'objective': 'binary:logistic',
          'tree_method': 'gpu_hist',
          'eval_metric': 'logloss',
          'dropout_rate': 0.1}  # 设置dropout率
num_boost_round = 100

dtrain = xgb.DMatrix(X_train, label=y_train)

# 训练模型
model = xgb.train(params, dtrain, num_boost_round)

# 使用模型进行预测
dtest = xgb.DMatrix(X_test)
pred = model.predict(dtest)

12.DART (Dropout Additive Regression Trees)

DART(Dropout Additive Regression Trees)是一种基于决策树的集成学习方法,它结合了随机性和集成思想,用于回归问题。

DART是通过对每个基础决策树中的节点应用dropout技术来引入随机性的。具体而言,在每次训练过程中,随机选择一部分节点,并将它们从当前树的构建过程中删除,这样剩下的树就会变得更加矮且宽,每个节点的分支也会减少。这种节点的随机删除过程可以增加模型的多样性,并减少过拟合的风险。

除了应用dropout,DART还使用了Boosting思想。Boosting是通过迭代地训练多个弱模型,然后将它们按一定规则进行组合,以构建一个更强大的集成模型。DART采用了加性模型(Additive Model)的方法,每个基础决策树都在之前树的预测结果基础上进行训练,以逐步提升模型性能。

import xgboost as xgb

# 创建一个DART模型
params = {'objective': 'binary:logistic',
          'tree_method': 'gpu_hist',
          'eval_metric': 'logloss',
          'rate_drop': 0.1,  # 设置dropout概率
          'sample_type': 'uniform',  # 随机丢弃树节点的策略
          'normalize_type': 'forest'}  # 归一化计算出的权重
num_boost_round = 100

dtrain = xgb.DMatrix(X_train, label=y_train)

# 训练模型
model = xgb.train(params, dtrain, num_boost_round)

# 使用模型进行预测
dtest = xgb.DMatrix(X_test)
pred = model.predict(dtest)

13.Regularized Gradient Boosting

Regularized Gradient Boosting(正则化梯度提升)是一种集成学习方法,结合了梯度提升(Gradient Boosting)和正则化技术,用于解决回归和分类问题。

梯度提升是一种迭代的集成学习技术,通过逐步构建一系列弱学习器(通常是决策树),每个学习器都试图纠正前面学习器的错误。梯度提升通过梯度下降来最小化损失函数,每一轮迭代都构建一个新的模型来拟合当前残差。最终,所有模型的预测结果加权相加形成最终的集成模型。

正则化是一种用于控制模型复杂度的技术,旨在降低模型过拟合的风险。在正则化梯度提升中,常用的正则化技术包括L1正则化(Lasso)和L2正则化(Ridge)。

  • L1正则化(Lasso)通过在损失函数中增加L1范数惩罚,鼓励模型权重稀疏化,从而选取最重要的特征进行建模,同时可以减少冗余特征的影响。
  • L2正则化(Ridge)通过在损失函数中增加L2范数惩罚,使得模型权重尽可能小,防止模型对训练数据的噪声过敏。L2正则化还可以提高模型的泛化能力。