python混淆矩阵代码(python中混淆矩阵)

http://www.itjxue.com  2023-03-04 12:14  来源:未知  点击次数: 

Python hmmlearn中的混淆矩阵是怎么表示的

hmmlearn这个库有三种模型,分别是Gaussian,Multinomial和GMMHMM。这三种模型对应的就是三种emission matrix(即混淆矩阵,也就是隐状态到观察态的概率)。Gaussian就是说混淆矩阵是一个高斯分布,即观察态是连续的。Multinomiual就是说混淆矩阵事一个Multibimiual distribution,即观察态势离散的。GMMHMM则是说混淆矩阵是遵循gaussinan mixture 分布,也是连续的。

题主问如何把混淆矩阵输入到模型里面。首先你要确定你的混淆矩阵的类型。对于Gaussian类型,就是把你希望的 mean和variance值放到模型里面。我就直接把文档里面的例子搬过来,例子里是建立了一个高斯分布的隐马尔科夫模型。

import numpy as np

from hmmlearn import hmm

#一个隐马尔科夫模型由(p向量,状态转移矩阵,混淆矩阵)来定义。

startprob = np.array([0.6, 0.3, 0.1])

# 定义初始状态的概率

transmat = np.array([[0.7, 0.2, 0.1], [0.3, 0.5, 0.2], [0.3, 0.3, 0.4]])#定义转移矩阵的概率

means = np.array([[0.0, 0.0], [3.0, -3.0], [5.0, 10.0]])

#定义混淆矩阵的均值

covars = np.tile(np.identity(2), (3, 1, 1))# 定义混淆矩阵的方差

model = hmm.GaussianHMM(3, "full", startprob, transmat)# 定义一个混淆矩阵为高斯分布的隐马尔科夫模型。 这里‘full’的意思就是说你输入的方差矩阵每个元素都给出了,不是一个只是对角线上的元素为0的矩阵

model.means_ = means

model.covars_ = covars#把你希望的均值方差输入你定义的模型里面,到此你就把混淆矩阵输入进模型了

X, Z = model.sample(100)

对于Multinomial 和 GMM,我还没用,不过Multinomial应该是需要你自己手动输入隐状态到观察态的概率的,而GMM应该是和Gaussian类型类似,只是需要多输入一个权重因子。

对于第二个问题,covariance_type意思是你的混淆矩阵的covariance matrix是什么类型,比如若只是对角线上的元素不为0,则把covariance_type设为‘diag’。

python里面一些简单代码的含义是什么?(题主零基础)

主要就两个文件 一个是sample的名字 labels.txt

还有个放矩阵 predict.txt 两列,一列pre 二列true

放矩阵那里他会调confusion_matrix自己算,如果你自己算好了不需要算,那代码就要改

confusion_matrix介绍见

这东西用R画快多了,python的也只是刚才看了下介绍,应该没啥大问题

python是否有绘制混淆矩阵的函数,怎么来实现

#?-*-?coding:?UTF-8?-*-

"""绘制混淆矩阵图"""

import?matplotlib.pyplot?as?plt

from?sklearn.metrics?import?confusion_matrix

def?confusion_matrix_plot_matplotlib(y_truth,?y_predict,?cmap=plt.cm.Blues):

????"""Matplotlib绘制混淆矩阵图

????parameters

????----------

????????y_truth:?真实的y的值,?1d?array

????????y_predict:?预测的y的值,?1d?array

????????cmap:?画混淆矩阵图的配色风格,?使用cm.Blues,更多风格请参考官网

????"""

????cm?=?confusion_matrix(y_truth,?y_predict)

????plt.matshow(cm,?cmap=cmap)??#?混淆矩阵图

????plt.colorbar()??#?颜色标签

????for?x?in?range(len(cm)):??#?数据标签

????????for?y?in?range(len(cm)):

????????????plt.annotate(cm[x,?y],?xy=(x,?y),?horizontalalignment='center',?verticalalignment='center')

????plt.ylabel('True?label')??#?坐标轴标签

????plt.xlabel('Predicted?label')??#?坐标轴标签

????plt.show()??#?显示作图结果

if?__name__?==?'__main__':

????y_truth?=?[1,?0,?1,?1,?1,?1,?1,?1,?1,?1,?0,?0,?0,?0,?0]

????y_predict?=?[1,?0,?0,?1,?0,?1,?1,?1,?1,?1,?0,?1,?0,?1,?0]

????confusion_matrix_plot_matplotlib(y_truth,?y_predict)

python评分卡之LR及混淆矩阵、ROC

import pandas as pd

import numpy as np

from sklearn import linear_model

# 读取数据

sports = pd.read_csv(r'C:\Users\Administrator\Desktop\Run or Walk.csv')

# 提取出所有自变量名称

predictors = sports.columns[4:]

# 构建自变量矩阵

X = sports.ix[:,predictors]

# 提取y变量值

y = sports.activity

# 将数据集拆分为训练集和测试集

X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size = 0.25, random_state = 1234)

# 利用训练集建模

sklearn_logistic = linear_model.LogisticRegression()

sklearn_logistic.fit(X_train, y_train)

# 返回模型的各个参数

print(sklearn_logistic.intercept_, sklearn_logistic.coef_)

# 模型预测

sklearn_predict = sklearn_logistic.predict(X_test)

# 预测结果统计

pd.Series(sklearn_predict).value_counts()

-------------------------------------------------------------------------------------------------------------------------------------------

# 导入第三方模块

from sklearn import metrics

# 混淆矩阵

cm = metrics.confusion_matrix(y_test, sklearn_predict, labels = [0,1])

cm

Accuracy = metrics.scorer.accuracy_score(y_test, sklearn_predict)

Sensitivity = metrics.scorer.recall_score(y_test, sklearn_predict)

Specificity = metrics.scorer.recall_score(y_test, sklearn_predict, pos_label=0)

print('模型准确率为%.2f%%:' %(Accuracy*100))

print('正例覆盖率为%.2f%%' %(Sensitivity*100))

print('负例覆盖率为%.2f%%' %(Specificity*100))

-------------------------------------------------------------------------------------------------------------------------------------------

# 混淆矩阵的可视化

# 导入第三方模块

import seaborn as sns

import matplotlib.pyplot as plt

# 绘制热力图

sns.heatmap(cm, annot = True, fmt = '.2e',cmap = 'GnBu')

plt.show()

------------------------------------------------------------------------------------------------------------------------------------------

# 绘制ROC曲线

# 计算真正率和假正率

fpr,tpr,threshold = metrics.roc_curve(y_test, sm_y_probability)

# 计算auc的值?

roc_auc = metrics.auc(fpr,tpr)

# 绘制面积图

plt.stackplot(fpr, tpr, color='steelblue', alpha = 0.5, edgecolor = 'black')

# 添加边际线

plt.plot(fpr, tpr, color='black', lw = 1)

# 添加对角线

plt.plot([0,1],[0,1], color = 'red', linestyle = '--')

# 添加文本信息

plt.text(0.5,0.3,'ROC curve (area = %0.2f)' % roc_auc)

# 添加x轴与y轴标签

plt.xlabel('1-Specificity')

plt.ylabel('Sensitivity')

plt.show()

-------------------------------------------------------------------------------------------------------------------------------------------

#ks曲线? ?链接:? 风控数据分析学习笔记(二)Python建立信用评分卡 -

fig, ax = plt.subplots()

ax.plot(1 - threshold, tpr, label='tpr')# ks曲线要按照预测概率降序排列,所以需要1-threshold镜像

ax.plot(1 - threshold, fpr, label='fpr')

ax.plot(1 - threshold, tpr-fpr,label='KS')

plt.xlabel('score')

plt.title('KS Curve')

plt.ylim([0.0, 1.0])

plt.figure(figsize=(20,20))

legend = ax.legend(loc='upper left')

plt.show()

Python sklearn.metrics模块混淆矩阵常用函数

1.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)

参数分别为y实际类别、预测类别、返回值要求(True返回正确的样本占比,false返回的是正确分类的样本数量)

eg:

import numpy as np

from sklearn.metrics import accuracy_score

y_pred = [0, 2, 1, 3]

y_true = [0, 1, 2, 3]

accuracy_score(y_true, y_pred)

0.5

accuracy_score(y_true, y_pred, normalize=False)

2.classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2)

参数:真是类别,预测类别,目标类别名称

eg:

3.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None)

输出为混淆矩阵

eg:

太多了,写3个常用的吧,具体参考help(metrics)

defcm_plot(y,yp):#参数为实际分类和预测分类

fromsklearn.metricsimportconfusion_matrix

#导入混淆矩阵函数

cm = confusion_matrix(y,yp)

#输出为混淆矩阵

importmatplotlib.pyplotasplt

#导入作图函数

plt.matshow(cm,cmap=plt.cm.Greens)

# 画混淆矩阵图,配色风格使用cm.Greens

plt.colorbar()

# 颜色标签

forxinrange(len(cm)):

foryinrange(len(cm)):

plt.annotate(cm[x,y],xy=(x,y),horizontalalignment='center',verticalalignment='center')

#annotate主要在图形中添加注释

# 第一个参数添加注释

# 第一个参数是注释的内容

# xy设置箭头尖的坐标

#horizontalalignment水平对齐

#verticalalignment垂直对齐

#其余常用参数如下:

# xytext设置注释内容显示的起始位置

# arrowprops 用来设置箭头

# facecolor 设置箭头的颜色

# headlength 箭头的头的长度

# headwidth 箭头的宽度

# width 箭身的宽度

plt.ylabel('True label')# 坐标轴标签

plt.xlabel('Predicted label')# 坐标轴标签

returnplt

#函数调用

cm_plot(train[:,3],tree.predict(train[:,:3])).show()

(责任编辑:IT教学网)

更多

推荐计算机等级考试文章