栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

用决策树对异常情况的研究

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用决策树对异常情况的研究

实验的数据

提取码 73rt

画出决策树的代码

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import roc_curve
import matplotlib.pyplot as plt
from sklearn.metrics import roc_auc_score
from graphviz import Source
from IPython.display import Image
from sklearn import tree
from sklearn import metrics

af = pd.read_csv('data3/1test.csv', encoding='gbk')
df = pd.read_csv('data3/2train.csv', encoding='gbk')
cf = pd.read_csv('data3/3validation.csv', encoding='gbk')

# 2.提取特征变量与目标变量
X = df.drop(columns=['类别'])
y = df['类别']

C = cf.drop(columns=['类别'])
c = cf['类别']

A = af.drop(columns=['类别'])
a = af['类别']
# 计算混淆矩阵
clf = tree.DecisionTreeClassifier(max_depth=3)  # 可以加参数max_depth=3,criterion='entropy'
clf = clf.fit(X, y)
clf.score(X, y)

predicted_y = clf.predict(X)

print(metrics.classification_report(y, predicted_y))
print('Confusion matrix:' )
print( metrics.confusion_matrix(y, predicted_y) )
# 生成并显示决策树图
featureName = ['shuXin1', 'shuXin2', 'shuXin3', 'shuXin4', 'shuXin5', 'shuXin6',
               'shuXin7', 'shuXin8', 'shuXin9', 'shuXin10', 'shuXin11', 'shuXin12', 'shuXin13', 'shuXin14', 'shuXin15']
className = ['0', '1']
# 生成图
graph = Source(tree.export_graphviz(clf, out_file=None, feature_names=featureName, class_names=className, filled=True,
                                    rounded=True, special_characters=True))
# 保存到文件中并显示
png_bytes = graph.pipe(format='png')
with open('dectree.png', 'wb') as f:
    f.write(png_bytes)
Image(png_bytes)

# 简单预测
# a=[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]]
# print(clf.predict(a))

用决策树的一系列研究

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import roc_curve
import matplotlib.pyplot as plt
from sklearn.metrics import roc_auc_score

#  想输出什么就把注释的代码删掉就好了,全部输出太乱了。

# 1.数据读取与预处理
af = pd.read_csv('data3/1test.csv', encoding='gbk')
df = pd.read_csv('data3/2train.csv', encoding='gbk')
cf = pd.read_csv('data3/3validation.csv', encoding='gbk')
# df = pd.read_csv('data3/4combine.csv', encoding='gbk')  # 用混合的训练
# af.info()
# 2.提取特征变量与目标变量
X = df.drop(columns=['类别'])
y = df['类别']

C = cf.drop(columns=['类别'])
c = cf['类别']

A = af.drop(columns=['类别'])
a = af['类别']

# cb = cbf.drop(columns=['Lei'])
# cb = cbf['Lei']
# 3.划分训练集与测试集 训练集是2train/4combine 可以自己调整,通过改变读取的数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=120)

# print(X_train) 一堆数据(15列)
# print(X_test) 一堆数据(15列)
# print(y_train) 0或者1 和X_train 对应
# print(y_test)  0或者1 和y_test对应

# 4.模型训练与拟合
model = DecisionTreeClassifier(max_depth=15, random_state=123)
model.fit(X_train, y_train)  # 执行训练过程,用训练集train

# 5.算出预测的值
# (1)这里算的是第三个数据集的预测,然后把结果放在12test.csv的文件中
c_pred = model.predict(C)
column = ['Leibie']
test = pd.DataFrame(columns=column, data=c_pred)
test.to_csv('data3/5predict.csv')
# (2)训练集自己训练自己,看看预测结果准不准
y_pred = model.predict(X_test)  # 这里放入的X_test 就是一大串想要验证的数据,这里是输入训练集进行预测,等下把预测的结果比对即可
# (3)放入第一个数据集,把预测的结果算出来
a_pred = model.predict(A)       # 这里放入的是第一个数据集,等会儿用于数据比对

# 6.用预测的和实际的对比检验(采用已经有的model的准确率,和精确的准确率)
# (1)训练集自己和自己比对
# score = accuracy_score(y_pred, y_test)  # print(score)这里输出的是预测和结果的准确度
# print(score)
# (2)训练集和test比对
score = accuracy_score(a_pred, a)
# print(score)
# (3)自己预测的第三组数据放进去,第三组自己比较
# score = accuracy_score(c_pred, c)
# print(score)

model.score(X_test, y_test)  # print()这里输出的是用model模型自带的来看准确率,两个选一个,我选上面的

# ************************************以下的预测都是用4combine的数据********************************
# 7.系统预测类型是0还是1的概率
y_pred_proba = model.predict_proba(X_test)
b = pd.DataFrame(y_pred_proba, columns=['no', 'yes'])  # 系统预测类型是0还是1的概率
print(b)

# 8.计算有关阈值,假报警率,和命中率的列表
fpr, tpr, thres = roc_curve(y_test, y_pred_proba[:, 1])
b = pd.DataFrame()
b['阈值'] = list(thres)
b['假报警率'] = list(fpr)
b['命中率'] = list(tpr)
# print(b)

# 9.把列表画出对应的ROC的图
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.plot(fpr, tpr)
plt.xlabel('假报警率')
plt.ylabel('命中率')
plt.title('ROC曲线')
plt.show()
asd = roc_auc_score(y_test, y_pred_proba[:, 1])
# print(asd) 算出ROC曲线的面积

# 10.算各个数据的特征值
features = X.columns
importances = model.feature_importances_
DF =pd.DataFrame()
DF['特征名称'] = features
DF['特征重要性'] = importances
DF.sort_values('特征重要性', ascending=False)
# print(DF)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/958522.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号