068. 编写一个函数,实现简单的机器学习算法,线性回归、决策树

在 Python 中,可以使用 scikit-learn 库来实现简单的机器学习算法,例如线性回归和决策树。scikit-learn 是一个功能强大的机器学习库,提供了丰富的算法和工具,适合初学者和专业人士使用。

安装依赖库

在开始之前,请确保你已经安装了 scikit-learn 库。如果没有安装,可以通过以下命令安装:

pip install scikit-learn

示例代码

以下代码定义了两个函数,分别实现线性回归和决策树算法。我们将使用 scikit-learn 提供的示例数据集来训练和测试模型。

from sklearn.datasets import load_boston, load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor, DecisionTreeClassifier
from sklearn.metrics import mean_squared_error, accuracy_score

# 线性回归函数
def linear_regression_demo():
    # 加载波士顿房价数据集
    boston = load_boston()
    X, y = boston.data, boston.target

    # 划分训练集和测试集
    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)
    print(f"线性回归模型的均方误差 (MSE): {mse:.2f}")

# 决策树回归函数
def decision_tree_regression_demo():
    # 加载波士顿房价数据集
    boston = load_boston()
    X, y = boston.data, boston.target

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

    # 创建决策树回归模型
    model = DecisionTreeRegressor(random_state=42)
    model.fit(X_train, y_train)

    # 预测测试集
    y_pred = model.predict(X_test)

    # 计算均方误差
    mse = mean_squared_error(y_test, y_pred)
    print(f"决策树回归模型的均方误差 (MSE): {mse:.2f}")

# 决策树分类函数
def decision_tree_classification_demo():
    # 加载鸢尾花数据集
    iris = load_iris()
    X, y = iris.data, iris.target

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

    # 创建决策树分类模型
    model = DecisionTreeClassifier(random_state=42)
    model.fit(X_train, y_train)

    # 预测测试集
    y_pred = model.predict(X_test)

    # 计算准确率
    accuracy = accuracy_score(y_test, y_pred)
    print(f"决策树分类模型的准确率 (Accuracy): {accuracy:.2f}")

# 示例用法
if __name__ == "__main__":
    print("线性回归示例:")
    linear_regression_demo()

    print("\n决策树回归示例:")
    decision_tree_regression_demo()

    print("\n决策树分类示例:")
    decision_tree_classification_demo()

代码说明

数据集加载

  • 使用 scikit-learn 提供的 load_bostonload_iris 函数加载示例数据集。

  • load_boston 是一个回归任务的数据集,包含波士顿房价数据。

  • load_iris 是一个分类任务的数据集,包含鸢尾花数据。

数据集划分:使用 train_test_split 函数将数据集划分为训练集和测试集。

线性回归

  • 使用 LinearRegression 创建线性回归模型。

  • 使用 fit 方法训练模型。

  • 使用 predict 方法进行预测。

  • 使用 mean_squared_error 计算均方误差(MSE)。

决策树回归

  • 使用 DecisionTreeRegressor 创建决策树回归模型。

  • 使用 fit 方法训练模型。

  • 使用 predict 方法进行预测。

  • 使用 mean_squared_error 计算均方误差(MSE)。

决策树分类

  • 使用 DecisionTreeClassifier 创建决策树分类模型。

  • 使用 fit 方法训练模型。

  • 使用 predict 方法进行预测。

  • 使用 accuracy_score 计算准确率。

异常处理:在实际应用中,建议对数据集加载、模型训练和预测等步骤进行异常处理,确保程序的健壮性。

示例输出

假设运行上述代码,输出可能如下:

线性回归示例:
线性回归模型的均方误差 (MSE): 23.25

决策树回归示例:
决策树回归模型的均方误差 (MSE): 25.10

决策树分类示例:
决策树分类模型的准确率 (Accuracy): 0.97

注意事项

  1. 数据预处理:在实际应用中,通常需要对数据进行预处理,例如标准化、归一化、处理缺失值等。
  2. 模型选择:根据任务类型(回归或分类)选择合适的模型。scikit-learn 提供了多种模型,例如线性回归、决策树、随机森林、支持向量机等。
  3. 超参数调整:使用 GridSearchCVRandomizedSearchCV 对模型的超参数进行调整,以提高模型性能。
  4. 模型评估:使用多种评估指标(如均方误差、准确率、召回率、F1 分数等)全面评估模型性能。

扩展功能

如果你需要更复杂的机器学习功能,可以考虑以下内容:

  • 特征选择
from sklearn.feature_selection import SelectKBest, f_regression

selector = SelectKBest(f_regression, k=2)
X_new = selector.fit_transform(X, y)
  • 模型集成
from sklearn.ensemble import RandomForestRegressor

model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
  • 交叉验证
from sklearn.model_selection import cross_val_score

scores = cross_val_score(model, X, y, cv=5)
print(f"交叉验证平均分数: {scores.mean():.2f}")

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)