zoukankan      html  css  js  c++  java
  • 《数据挖掘导论》学习笔记(二)

    数据挖掘导论 第四章

    分类:基本概念、决策树与模型评估

    分类的定义:分类任务就是通过学习得到一个目标函数f,把每个属性集x映射到一个预先定义的类标号y。

    目标函数也称为分类模型,有两个主要目的:1、描述性建模 2、预测性建模

    分类适用于预测两元或标称类型的数据集,即离散的数据集。

    决策树分类法

    选择最佳划分的度量通常都是根据划分后子女结点不纯性的程度。不纯的程度越低,类分布就越倾斜。

    不纯性度量的例子包括:1、熵  2、基尼系数  3、分类差错率

    模型的过分拟合

    分类模型的误差大致分为两种:训练误差泛化误差。训练误差又叫再代入误差或表现误差,是在训练记录上误分类样本样本比例,

    而泛化误差是模型在未知记录上的期望误差。

    一个好的分类模型要具备低训练误差和低泛化误差。

    对训练数据拟合太好的模型,其泛化误差可能比具有较高训练误差的模型高,这就造成模型过分拟合。

    导致模型过分拟合的原因有:1、噪声记录导致的过分拟合 2、缺乏代表性样本导致的过分拟合

    例题:现在有一些数据,有三个属性值,分别是权重,体重,身高,要根据这些数据,用决策树的算法训练。

    1.5 50 thin
    1.5 60 fat
    1.6 40 thin
    1.6 60 fat
    1.7 60 thin
    1.7 80 fat
    1.8 60 thin
    1.8 90 fat
    1.9 70 thin
    1.9 80 fat

    实现代码
    # coding:utf-8
    import numpy as np
    import scipy as sp
    from sklearn import tree
    from sklearn.metrics import precision_recall_curve
    from sklearn.metrics import classification_report
    from sklearn.cross_validation import train_test_split
    
    
    ''''' 数据读入 '''
    data = []
    labels = []
    with open("1.txt") as ifile:
        for line in ifile:
            tokens = line.strip().split(' ')
            data.append([float(tk) for tk in tokens[:-1]])
            # print ([float(tk) for tk in tokens[:-1]])
            labels.append(tokens[-1])
            # print (tokens[-1])
    x = np.array(data)
    # print x
    labels = np.array(labels)
    # print labels
    y = np.zeros(labels.shape)
    # print y
    
    ''''' 标签转换为0/1 '''
    y[labels == 'fat'] = 1
    
    ''''' 拆分训练数据与测试数据 '''
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
    
    
    ''''' 使用信息熵作为划分标准,对决策树进行训练 '''
    clf = tree.DecisionTreeClassifier(criterion='entropy')
    print "========clf========="
    print(clf)
    clf.fit(x_train, y_train)
    
    ''''' 把决策树结构写入文件 '''
    with open("tree.dot", 'w') as f:
        f = tree.export_graphviz(clf, out_file=f)
    
    ''''' 系数反映每个特征的影响力。越大表示该特征在分类中起到的作用越大 '''
    print "=====clf.feature_importances_======"
    print(clf.feature_importances_)
    
    '''''测试结果的打印'''
    answer = clf.predict(x_train)
    print(x_train)
    print(answer)
    print(y_train)
    print(np.mean(answer == y_train))
    
    '''''准确率与召回率'''
    precision, recall, thresholds = precision_recall_curve(y_train, clf.predict(x_train))
    answer = clf.predict_proba(x)[:, 1]
    print "================="
    print(classification_report(y, answer, target_names=['thin', 'fat']))
  • 相关阅读:
    小程序40001错误
    【2020-06-07】把心思放在赚钱上就对了
    【2020-06-05】下点功夫,看清题目,并做好选择
    【2020-06-04】人生十三信条
    【2020-06-03】顺境时也需要放空
    【2020-06-02】我感染别人的同时,也加强了自己的信念
    【2020-06-01】信息的吸收源自压力
    【一句日历】2020年6月
    【2020-05-30】向风、向雨、向阳光去讨教
    【2020-05-29】爱眼前的一切
  • 原文地址:https://www.cnblogs.com/kinsomy/p/6001707.html
Copyright © 2011-2022 走看看