scikitlearn/theano多分类问题详解

原创 2016年08月29日 12:51:46
入门先看下面两个网址
二分类:
http://python.jobbole.com/82208/
多分类:
http://blog.csdn.net/han_xiaoyang/article/details/50521072

下面说说改进及注意点:
上述博客的数据例子都是根据自己的意思随机生成的。
这边用iris数据进行扩展
由于iris数据是像下面这样的:
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
。。。。。。。
7.0,3.2,4.7,1.4,Iris-versicolor
6.4,3.2,4.5,1.5,Iris-versicolor
。。。。。。。
6.3,3.3,6.0,2.5,Iris-virginica
5.8,2.7,5.1,1.9,Iris-virginica
7.1,3.0,5.9,2.1,Iris-virginica

一共150行,每行4个特征外加1个类别,共3种类别
所以神经网络作如下设置
class Config:
    nn_input_dim = 4  # 4个特征
    nn_output_dim = 3  # 3种类
    # Gradient descent parameters (I picked these by hand)
    epsilon = 0.01  # learning rate for gradient descent
    reg_lambda = 0.01  # regularization strength

最后一列代表花的种类,原数据是用名称代替的,这也是我们在多分类中经常碰到的。所以这里要转换为数字。
所以我们在程序里需要进行改动,如下:
t = np.zeros(len(labelMat))
    #将target阵列中特定元素的位置设置为对应整数(真简洁)
    t[labelMat == 'Iris-setosa'] = 0   #注意这里只能是0开始定义
    t[labelMat == 'Iris-versicolor'] = 1
    t[labelMat == 'Iris-virginica'] = 2
model = build_model(X, t, 5, print_loss=True)

注意这里的0,1,2。我最开始想弄随便弄个什么数,比如1,2,3的,反正都是求概率。后来发现行不通。
最后又仔细研读了下代码
注意程序里有个probs,
这是个概率矩阵,比如这里就是150*3的矩阵
每一行的3个数分别代表了属于三个类的概率。
虽说这3个概率跟具体的类别用什么数字或者符号代替没啥关系。但是注意到,要想获得者三个概率,得用索引来从矩阵probs中获得啊。。。。所以必须从0开始依次增大。。。。

于是想起来以前Theano中一些深度学习的例子。原例子是对mnist进行数字识别的。是多分类。不过很巧的是,它识别的数字种类正好是0,1,2,3,4...是从0开始的,也就没仔细想。
于是又用iris数据集在Theano的DBN上跑了一遍,还是得把类别转换为0,1,2才能跑,不能是其他数字。道理和上面类似。
说到这里,再扯远一点。原来DBN的例子中值是训练加批量测试,没有给出具体的预测/分类方法。
于是我自己改了一下:
在test_DBN()函数中将验证好的模型存为best_DBN_model.pkl。然后在预测函数中,如下设置
DBN_model = pickle.load(open('best_DBN_model.pkl'))

    # compile a predictor function
    predict_model = theano.function(
            inputs=[DBN_model.x],
            outputs=DBN_model.logLayer.y_pred
        )
注意这里DBN_model.x这样设置是因为def __init__函数中进行了如下设置
self.x = T.matrix('x') 
self.y = T.ivector('y')
x即特征矩阵集,y即标签矩阵集
而这里DBN网络最上面是由一层logistic回归输出的(准确地说是softmax)在logistic_sgd.py文件中有如下定义:
self.y_pred = T.argmax(self.p_y_given_x, axis=1)
这就跟我们上文中神经网络代码中的return np.argmax(probs, axis=1)一样了。
最后再说一下DBN函数中调参数就调下面这段就行了,不用调初始化函数中的了。
dbn = DBN(numpy_rng=numpy_rng, n_ins=4,
              hidden_layers_sizes=[10,10,10,10,10,10],
              n_outs=3)
其实跟神经网络一样设置。输入输出。以iris数据为例,特征是4个,n_ins=4,种类是3个,n_outs=3。
[10,10,10,10,10,10]代表我们用了6层RBM,每层RBM用的10个节点。

Theano深度学习笔记(二)逻辑回归对MNIST分类

Theano深度学习笔记第二章
  • mingtian715
  • mingtian715
  • 2017年01月20日 11:42
  • 663

LR进行多分类theano代码分析

模型 逻辑斯谛回归是概率线性分类器。公式如下: P(Y=i|x,W,b)=softmaxi(Wx+b)=eWix+bi∑jeWjx+bjP(Y=i|x,W,b)=softmax_i(Wx + b)...
  • ye_123
  • ye_123
  • 2015年06月24日 16:25
  • 864

sklearn学习笔记(3)svm多分类

SVC、NuSVC、LinearSVC都可以在一个数据集上实现多分类。 SVC和NuSVC方法类似,但是有不同的输入参数集和不同的数学表述。另一方面,linearSVC是SVC的在线性核的基础上的另...
  • BabyBirdToFly
  • BabyBirdToFly
  • 2017年06月06日 19:55
  • 4851

机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)

机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)zouxy09@qq.comhttp://blog.csdn.net/zouxy09        机器学习算法...
  • zouxy09
  • zouxy09
  • 2014年03月02日 23:49
  • 203436

以logistic Regression为例实现多类别分类及Python实现

关于logistic 回归的内容,参照前面的文章,这里主要讲了多分类的方法和Python的实现, (一)多分类方法     1.第一种简单的方法是一对所有(one-Versus-All,OVA),给定...
  • woaidapaopao
  • woaidapaopao
  • 2016年06月05日 17:20
  • 5472

用Python处理多分类的线性可分问题

我们接着Logistics Regression模型的思路,考虑如何处理多分类的线性可分问题。 下面我们介绍Softmax Regression模型,这一模型是对Logistics 模型的扩展,用于处...
  • m0_37430356
  • m0_37430356
  • 2017年09月12日 19:47
  • 458

【scikit-learn】05:sklearn文本分类及评价指标

今天看到一句话: 你能留给岁月的,岁月能留给你的,除了一个更好的自己,别无其他。 还能什么比这更能激励自己学习呢?在windows下安装sklearn,直接下载winpython安装就行了。自行选...
  • kevinelstri
  • kevinelstri
  • 2016年09月23日 14:44
  • 2646

【scikit-learn】评估分类器性能的度量,像混淆矩阵、ROC、AUC等

 内容概要¶ 模型评估的目的及一般评估流程分类准确率的用处及其限制混淆矩阵(confusion matrix)是如何表示一个分类器的性能混淆矩阵中的度量是如何计算的通过改变分类阈值来调整分...
  • JasonDing1354
  • JasonDing1354
  • 2016年01月22日 15:57
  • 14615

利用Theano理解深度学习——Logistic Regression

一、Logistic Regression1、LR模型Logistic回归是广义线性模型的一种,属于线性的分类模型,在其模型中主要有两个参数,即:权重矩阵WW和偏置向量bb。在Logistic回归中,...
  • google19890102
  • google19890102
  • 2015年10月08日 18:41
  • 12446

多类分类和多标签分类

给定一组训练实例(X1,Y1),(X2,Y2),......(Xn,Yn),典型地,每个实例Xi i=1,2,...,n是一个m维向量,Yi是一个有l(l>=1)个类别的向量,分类的任务是从训练实例中...
  • hunauchenym
  • hunauchenym
  • 2009年12月06日 09:15
  • 13105
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:scikitlearn/theano多分类问题详解
举报原因:
原因补充:

(最多只允许输入30个字)