当前位置: 首页 > news >正文

机器学习-人与机器生数据的区分模型测试 -数据筛选

内容继续机器学习-人与机器生数据的区分模型测试

使用随机森林的弱学习树来筛选相对稳定的特征数据

# 随机森林筛选特征
X = data.drop(['city', 'target'], axis=1)  # 去除修改前的城市名称列和目标变量列
y = data['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)rf_model = RandomForestClassifier(n_estimators=100, random_state=42)  # 假设使用随机森林模型
rf_model.fit(X_train, y_train)feature_importances = rf_model.feature_importances_
feature_names = X.columns
# 打印特征重要性
for feature_name, importance in zip(feature_names, feature_importances):print(f"{feature_name}: {importance}")#特征有消息放入DATAFRAME中
feature_importances_df = pd.DataFrame({'Feature': feature_names, 'Importance': feature_importances})
feature_importances_df = feature_importances_df.sort_values(by='Importance', ascending=False)
feature_importances_df.index = range(1, len(feature_importances_df) + 1)
#feature_importances_df.to_csv('feature_importances.csv', index=False)# 绘制优化后的特征重要性图
plt.figure(figsize=(12, 8))
plt.barh(feature_importances_df['Feature'], feature_importances_df['Importance'],height=0.8,color='#1f77b4'  # 可选:调整颜色:ml-citation{ref="3" data="citationList"}
)
plt.gca().invert_yaxis()
plt.xlabel('Feature Importance', fontsize=12)
plt.ylabel('Feature', fontsize=12)
plt.title('Feature Importance in Random Forest Model', fontsize=14)
plt.grid(axis='x', linestyle='--', alpha=0.6)  # 可选:添加网格线:ml-citation{ref="3" data="citationList"}
plt.tight_layout()
plt.savefig('feature_importance.png', dpi=300)  # 可选:保存高清图:ml-citation{ref="3" data="citationList"}
plt.show()

计算得出以下特征
在这里插入图片描述

其他指标计算有效性

IV值


#定义计算VIF函数
def calculate_vif(data):vif_data = pd.DataFrame()vif_data["feature"] = data.columnsvif_data["VIF"] = [variance_inflation_factor(data.values, i) for i in range(data.shape[1])]return vif_datavif_results = calculate_vif(X)  # X为自变量数据框
print(vif_results)
#VIF ≥ 10时,存在显著共线性

相关系数矩阵

corr_matrix = X.corr()  # X为自变量数据框
plt.figure(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.show()

共线性

X_matrix = X.values  # X为自变量数据框
cond_number = np.linalg.cond(X_matrix)
print("条件数:", cond_number)
#条件数 > 100时,可能存在显著共线性

容忍度


#容忍度是VIF的倒数,反映变量独立性。
tol = 1 / np.array([variance_inflation_factor(X.values, i) for i in range(X.shape[1])])
print("容忍度:", tol)
#容忍度 < 0.1时,可能存在显著共线性
特征筛选
# 选择重要特征
threshold = 0.01  # 设定阈值
important_features = feature_names[feature_importances > threshold]#筛选前30个特征
important_features = feature_importances_df['Feature'][:30]# 构建新的数据集
new_data = data[important_features]
new_data['target'] = data['target']  # 将目标变量添加到新的数据集中df_temp =temp[important_features]
df_temp['target'] = temp['target']# 划分训练集和测试集
X = new_data.drop('target', axis=1)
y = new_data['target']X_temp =df_temp.drop('target', axis=1)
y_temp = df_temp['target']#重新划分数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 数据标准化
scaler = StandardScaler()  # 假设使用标准化方法
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

上述代码的运行效果
IV值
在这里插入图片描述
相关性矩阵
在这里插入图片描述
共线与容忍度
在这里插入图片描述

相关文章:

  • hyper-v 虚拟机怎么克隆一台一样的虚拟机?
  • Python 在黎曼几何中的应用
  • 手机打电话时如何将通话对方的声音在手机上识别成文字
  • markdown 文档编辑软件 MarkText 使用教程
  • 板凳-------Mysql cookbook学习 (二)
  • spring cache使用指南
  • 西门子 Teamcenter13 Eclipse RCP 开发 1.3 工具栏 单选按钮
  • NDS3211HV单路H.264/HEVC/HD视频编码器
  • Dockerfile学习指南
  • 端到端自动驾驶系统实战指南:从Comma.ai架构到PyTorch部署
  • AI517 AI本地部署 docker微调(失败)
  • 车载以太网驱动智能化:域控架构设计与开发实践
  • ECS/GEM是半导体制造业的标准通信协议中host和equipment的区别是什么,在交互过程中,如何来定位角色谁为host,谁为equipment
  • C# 中的锁
  • 数字万用表与指针万用表使用方法及注意事项
  • 上集:一个前端的血泪复仇记 —— 静态部署的胜利
  • 调用DeepSeek系列模型问答时,输出只有</think>标签,而没有<think>标签
  • CANoe CAPL TCP DoIP通信问题
  • 【springboot+vue3的前后端分离项目实现支付宝的沙箱支付】
  • 使用instance着色
  • 上交所五方面落实募资新规:强化关键少数责任和股东权利保障
  • 齐白石精品在波士顿展出,“白石画屋”呈现水墨挥洒
  • 西王食品连亏三年:主业齐“崩”,研发人员多为专科生
  • 中国人民抗日战争暨世界反法西斯战争胜利80周年纪念活动标识发布
  • 学习时报头版:世界要公道不要霸道
  • 中美会谈前都发生了什么?美方为何坐不住了?