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']))
  • 相关阅读:
    asp.net mvc 中使用async/await异步编程
    简述C#中浅复制和深复制
    Angular:自定义表单控件
    Angular:Reactive Form的使用方法和自定义验证器
    Angular:ViewProviders和Providers的区别
    Angular:OnPush变化检测策略介绍
    Angular:利用内容投射向组件输入ngForOf模板
    在Angular中利用trackBy来提升性能
    Angular @HostBinding()和@HostListener()用法
    Angular利用@ViewChild在父组件执行子组件的方法
  • 原文地址:https://www.cnblogs.com/kinsomy/p/6001707.html
Copyright © 2011-2022 走看看