为了大作业的机器学习篇一

明确机器学习的需求,确定降维

降维可以通过两种不同的方式完成:

1、仅保留原始数据集中最相关的原有变量,保留数据属性列原有数据具体意义(此技术称为特征选择)特征选择四种方法
2、通过查找较小的一组新变量,每个变量都是输入变量的组合,包含与输入变量基本相同的信息。新变量失去具体可解释意义(此技术称为降维)

数据预处理

数据预处理方法参考

选择训练模型

由于我的大作业要求有属性对结果的影响分析。这就导致这种机器学习的目的是分析属性的相关性和重要性,预测结果准确度只是验证属性分析的手段。
我需要用特征选择,本人在一篇博客找到一个可以输出属性贡献值(重要值)的函数:特征重要性feature_importances_。(基于决策树的特征重要值
随机森林降维实战链接在这呢!

4种特征选择

这里借用别人的csdn,四种特征选择

交上我自己大作业随机森林的代码

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error

data = pd.read_csv('../db/Na-Se-time.csv')
# print(data.isnull().sum())
x = data[data.columns.difference(['outcome'])]  # 数据特征
y = data['outcome']  # 标签
feature_list = list(data[data.columns.difference(['outcome'])])
x_train, x_test, y_train, y_test = train_test_split(x, y)

# 随机森林训练
model = RandomForestRegressor(n_estimators=100)
model.fit(x_train, y_train)
predictions = model.predict(x_test)

# 特征重要值
print('特征重要性参数:n{}'.format(model.feature_importances_))
im = pd.DataFrame({'importance': model.feature_importances_, 'var': data.columns[:-1]})
im = im.sort_values(by='importance', ascending=False)
print(im.head(10))

# 随机森林回归模型评估
print("随机森林回归的默认评估值为:", model.score(x_test, y_test))
print("随机森林回归的R_squared值为:", r2_score(y_test, predictions))
print("随机森林回归的均方误差为:", mean_squared_error(y_test, predictions))
print("随机森林回归的平均绝对误差为:", mean_absolute_error(y_test, predictions))

# # 画出特征重要性参数柱状图
# plt.style.use('fivethirtyeight')
# # list of x locations for plotting
# x_values = list(range(len(im)))
# # Make a bar chart
# plt.bar(x_values, im['importance'], orientation='vertical', color='r', edgecolor='k', linewidth=1.2)
# # Tick labels for x axis
# plt.xticks(x_values, feature_list, rotation='vertical')
# # Axis labels and title
# plt.ylabel('Importance');
# plt.xlabel('Variable');
# plt.title('Variable Importances');
# plt.savefig('../figure/14_importance.png', dpi=1080)
# # 将特征重要值写入csv文件中
# im.to_csv('../db/14_importance.csv', index=False, header=[k for k in im])


# 生成决策树
from sklearn.tree import export_graphviz
import pydot
import os

os.environ['PATH'] = os.environ['PATH'] + (';E:\\Graphviz\\bin\\')
# 从这100个决策树中,就选第6个决策树吧。
tree = model.estimators_[5]

# 将决策树输出到dot文件中
export_graphviz(tree,
                out_file='../db/Na-Se-time.dot',
                feature_names=feature_list,
                rounded=True,
                precision=1)

# 将dot文件转化为图结构
(graph,) = pydot.graph_from_dot_file('../db/Na-Se-time.dot')

# 将graph图输出为png图片文件
graph.write_png('../db/Na-Se-time.png')

这块代码有两个地方,要注意一下。
一就是数据,数据格式如下图
outcome是输出二、就是生成决策树图片这里。需要安装pydot和Graphviz
这个链接是我熬夜做大作业时,这个地方帮我解决问题的大佬博客
决策树生成图片时报错指导

结果

我生成的决策树图片是这样的
随机森林中其中一颗决策树

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值