Python机器学习应用之基于LightGBM的分类预测篇解读
简介
本篇教程将介绍如何使用Python和LightGBM库来构建一个分类预测模型。LightGBM是一个用于大规模数据集的快速、高效、分布式梯度提升框架,可以用来解决分类和回归问题。
步骤
1. 准备数据集
首先,我们需要准备一个数据集,用于训练我们的分类预测模型。在这里,我们使用sklearn中的鸢尾花数据集作为示例数据集。代码如下:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)
2. 构建模型
接下来,我们将使用LightGBM库来构建一个分类预测模型。我们将使用默认参数来构建模型,如果需要更好的性能,可以调整参数来优化模型。
import lightgbm as lgb
train_data = lgb.Dataset(X_train, label=y_train)
test_data = lgb.Dataset(X_test, label=y_test)
params = {
"objective": "multiclass",
"num_class": 3,
}
model = lgb.train(
params=params,
train_set=train_data,
valid_sets=[train_data, test_data],
num_boost_round=100,
)
3. 预测并评估模型
模型训练完成后,我们可以使用训练数据集来预测测试数据集的结果,并评估模型的性能。下面的代码将使用sklearn中的accuracy_score来计算分类准确率。
import numpy as np
from sklearn.metrics import accuracy_score
y_pred = np.argmax(model.predict(X_test), axis=1)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
4. 参数调优
如果模型的性能不够好,我们可以尝试调整参数来优化模型。下面是一个参数调优的例子,我们使用网格搜索来尝试不同的参数组合,并选择精度最高的模型。
from sklearn.model_selection import GridSearchCV
param_grid = {
"max_depth": [5, 10, 15],
"learning_rate": [0.001, 0.01, 0.1],
"num_leaves": [10, 20, 30],
}
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=3, n_jobs=-1)
grid_search.fit(X_train, y_train)
best_model = grid_search.best_estimator_
y_pred = np.argmax(best_model.predict(X_test), axis=1)
accuracy = accuracy_score(y_test, y_pred)
print(f"Best score: {grid_search.best_score_}, Accuracy: {accuracy}")
示例
示例1:手写数字分类
下面是一个使用LightGBM和sklearn内置的手写数字数据集进行分类的示例。首先,我们需要下载手写数字数据集,并将数据集中的像素值转换为特征向量。
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
digits = load_digits()
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.2, random_state=42)
然后,我们可以使用LightGBM来构建一个模型,并使用训练数据集来预测测试数据集的结果。
import lightgbm as lgb
train_data = lgb.Dataset(X_train, label=y_train)
test_data = lgb.Dataset(X_test, label=y_test)
params = {
"objective": "multiclass",
"num_class": 10,
}
model = lgb.train(
params=params,
train_set=train_data,
valid_sets=[train_data, test_data],
num_boost_round=100,
)
import numpy as np
from sklearn.metrics import accuracy_score
y_pred = np.argmax(model.predict(X_test), axis=1)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
示例2:Kaggle房价预测
下面是一个使用LightGBM和Kaggle房价预测数据集进行预测的示例。首先,我们需要下载数据集,并将数据集中的特征值和目标值分别存储到X和y中。
import pandas as pd
train_df = pd.read_csv("train.csv")
y = train_df["SalePrice"]
X = train_df.drop(columns=["SalePrice", "Id"])
然后,我们可以使用LightGBM和sklearn来构建一个模型,并使用训练数据集来预测测试数据集的结果。最后,将结果保存到submission.csv文件中。
import lightgbm as lgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
train_data = lgb.Dataset(X_train, label=y_train)
test_data = lgb.Dataset(X_test, label=y_test)
params = {
"objective": "regression",
"metric": "rmse",
}
model = lgb.train(
params=params,
train_set=train_data,
valid_sets=test_data,
num_boost_round=1000,
)
test_df = pd.read_csv("test.csv")
test_X = test_df.drop(columns=["Id"])
y_pred = model.predict(test_X)
result = pd.DataFrame({"Id": test_df["Id"], "SalePrice": y_pred})
result.to_csv("submission.csv", index=False)
结论
本篇教程介绍了如何使用Python和LightGBM库来构建一个分类预测模型,包括数据集的准备、模型的构建和预测、模型的评估和参数调优,以及两个示例,手写数字分类和Kaggle房价预测。希望对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python机器学习应用之基于LightGBM的分类预测篇解读 - Python技术站