随机森林算法实现对编码后二进制数据的识别
1.直接先上代码!
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import StandardScaler
from joblib import dump, load
# 读取数据
data = pd.read_excel('/root/分类数据集.xlsx', sheet_name=0)
# 提取特征和标签
binary_strings = data["编码后数据"].values
y = data["类型"]
max_length = max(len(s) for s in binary_strings)
X = np.array([list(map(int, s.zfill(max_length))) for s in binary_strings])
# 样本标签数值化处理
target_map = {"ldpc": 0, "han": 1, "conv": 2}
target = y.map(target_map)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, target, test_size=0.2, random_state=42)
# 特征缩放
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 创建随机森林分类器实例
rf = RandomForestClassifier(random_state=42)
# 定义超参数搜索空间
param_grid = {
'n_estimators': [100, 200], # 决策树的数量
'max_depth': [None, 10, 20], # 树的最大深度
'min_samples_split': [2, 5], # 分裂内部节点所需的最小样本数
'min_samples_leaf': [1, 2], # 叶节点所需的最小样本数
'bootstrap': [True, False] # 是否使用bootstrap样本
}
# 创建GridSearchCV实例
grid_search = GridSearchCV(estimator=rf, param_grid=param_grid, cv=5, scoring='accuracy', n_jobs=-1)
# # 用GridSearchCV在给定的超参数网格上进行搜索
grid_search.fit(X_train_scaled, y_train)
# 使用找到的最佳参数的模型进行预测
best_rf = grid_search.best_estimator_
# 保存模型到文件
model_filename = 'best_random_forest64.joblib'
dump(best_rf, model_filename)
# 保存 StandardScaler
scaler_filename = 'scaler64.joblib'
dump(scaler, scaler_filename)
# 假设 max_length 已经在您的代码中计算出来了
max_length_filename = 'max_length64.joblib'
dump(max_length, max_length_filename)
y_pred = best_rf.predict(X_test_scaled)
# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy on test set with best parameters: {accuracy:.2f}")
2.代码解读
这是一个典型的机器学习流程,用于构建和评估一个随机森林分类器。
- 导入必要的库:
numpy
和pandas
用于数据处理。train_test_split
和GridSearchCV
来自sklearn.model_selection
,用于划分数据集和超参数优化。RandomForestClassifier
来自sklearn.ensemble
,是用于分类的随机森林模型。accuracy_score
来自sklearn.metrics
,用于计算模型准确度。StandardScaler
来自sklearn.preprocessing
,用于特征缩放。dump
和load
来自joblib
,用于模型和数据的保存和加载。
- 数据加载:
- 使用
pandas
的read_excel
函数从 Excel 文件中加载数据。
- 使用
- 特征和标签提取:
- 将数据集中的“编码后数据”列转换为数值列表,并将“类型”列作为标签。
- 数据预处理:
- 确定最大长度以保证所有样本长度一致。
- 使用
map
方法将标签转换为数值。
- 数据划分:
- 使用
train_test_split
将数据集划分为训练集和测试集。
- 使用
- 特征缩放:
- 使用
StandardScaler
对训练集和测试集进行特征缩放。
- 使用
- 模型初始化:
- 创建
RandomForestClassifier
实例。
- 创建
- 超参数搜索:
- 定义一个超参数网格,包括决策树数量、树的最大深度等。
- 使用
GridSearchCV
进行交叉验证和超参数搜索。
- 模型训练:
- 使用训练集数据训练模型,并找到最佳参数。
- 模型保存:
- 将最佳模型、标量器和最大长度保存到文件中。
- 模型评估:
- 使用测试集评估模型的准确度,并打印结果
通过这个过程,我们不仅展示了如何构建一个分类模型,还介绍了如何通过超参数优化来提高模型的性能。
3.数据集部分截图
就介绍到这里啦~~
如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!
如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!
如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!