代码拉取完成,页面将自动刷新
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, accuracy_score
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
# 设置随机种子,确保结果可重复
np.random.seed(42)
# 1. 生成时间戳数据
date_range = pd.date_range(start='2024-01-01', periods=60*24*30, freq='T') # 1周内每分钟的数据
# 2. 生成CPU、内存、电源、温度的随机数据
cpu_usage = np.random.uniform(50, 80, size=len(date_range)) # 50% - 80%
memory_usage = np.random.uniform(4, 16, size=len(date_range)) # 4GB - 16GB
power_voltage = np.random.uniform(215, 225, size=len(date_range)) # 215V - 225V
temperature = np.random.uniform(40, 75, size=len(date_range)) # 40°C - 75°C
# 3. 模拟系统崩溃
# 随机选取一些时间点作为崩溃点
crash_indices = np.random.choice(len(date_range), size=10, replace=False)
is_crash = np.zeros(len(date_range))
is_crash[crash_indices] = 1
# 4. 在崩溃前后,增加CPU、内存、温度的数值,以模拟异常
for crash_index in crash_indices:
if crash_index > 5: # 确保索引安全
cpu_usage[crash_index-5:crash_index+1] = np.random.uniform(90, 100, size=6) # 崩溃前CPU升高
memory_usage[crash_index-5:crash_index+1] = np.random.uniform(14, 16, size=6) # 崩溃前内存占用接近极限
temperature[crash_index-5:crash_index+1] = np.random.uniform(75, 90, size=6) # 温度异常升高
power_voltage[crash_index-5:crash_index+1] = np.random.uniform(210, 230, size=6) # 电压波动
# 5. 将数据整理成DataFrame
data = pd.DataFrame({
'timestamp': date_range,
'cpu_usage': cpu_usage,
'memory_usage': memory_usage,
'power_voltage': power_voltage,
'temperature': temperature,
'is_crash': is_crash
})
# 将timestamp设置为索引
data.set_index('timestamp', inplace=True)
# 6. 数据预览
print(data.head(10))
# 7. 可视化数据,观察是否有异常
plt.figure(figsize=(15, 10))
plt.subplot(4, 1, 1)
plt.plot(data.index, data['cpu_usage'], label='CPU Usage')
plt.title('CPU Usage Over Time')
plt.ylabel('CPU (%)')
plt.subplot(4, 1, 2)
plt.plot(data.index, data['memory_usage'], label='Memory Usage', color='g')
plt.title('Memory Usage Over Time')
plt.ylabel('Memory (GB)')
plt.subplot(4, 1, 3)
plt.plot(data.index, data['power_voltage'], label='Power Voltage', color='orange')
plt.title('Power Voltage Over Time')
plt.ylabel('Voltage (V)')
plt.subplot(4, 1, 4)
plt.plot(data.index, data['temperature'], label='Temperature', color='red')
plt.title('Temperature Over Time')
plt.ylabel('Temperature (°C)')
plt.tight_layout()
plt.savefig('plot111.png')
# 数据保存为csv文件,方便后续处理
data.to_csv('simulated_system_data.csv')
# 8. 使用随机森林分类器进行系统崩溃分析
# 分离特征和目标变量
X = data[['cpu_usage', 'memory_usage', 'power_voltage', 'temperature']] # 特征
y = data['is_crash'] # 目标变量
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 初始化并训练随机森林分类器
model = RandomForestClassifier(n_estimators=100, random_state=42, class_weight='balanced')
model.fit(X_train, y_train)
# 使用测试集进行预测
y_pred = model.predict(X_test)
# 打印模型评估结果
print("模型准确率:", accuracy_score(y_test, y_pred))
print("分类报告:\n", classification_report(y_test, y_pred, zero_division=1))
# 分析特征重要性
importances = model.feature_importances_
feature_importances = pd.Series(importances, index=X.columns)
# 可视化特征重要性
plt.figure(figsize=(10, 6))
sns.barplot(x=feature_importances, y=feature_importances.index)
plt.title('Feature Importance for System Crash Prediction')
plt.xlabel('Importance')
plt.ylabel('Feature')
plt.savefig('plot.png')
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。