python分类预测模型的特点

  • 模型
    模型特点
    位于
    SVM 强大的模型,可以用来回归,预测,分类等,而根据选取不同的和函数,模型可以是线性的/非线性的 sklearn.svm
    决策树 基于"分类讨论,逐步细化"思想的分类模型,模型直观,易解释 sklearn.tree
    朴素贝叶斯 基于概率思想的简单有效的分类模型,能够给出容易理解的概率解释 sklearn.naive_bayes
    神经网络 具有强大的拟合能力,可疑用于拟合,分类等,它有多个增强版本,如递神经网络,卷积神经网络,自编吗器等,这些是深度学习的模型基础 Keras
    逻辑回归 比较基础的线性分类模型,很多时候是简单有效的选择 sklearn.linear_model
    随机森林 思想跟决策树类似,精度通常比决策树要高,缺点是由于随机性, 丧失了决策树的可解释性 sklearn.ensemble
  • python建模的步骤:
    1. 建立一个对象(这个对象是空白的,需要进一步训练)
    2. 然后,我们要设置模型的参数
    3. 接着就是通过fit()方法对模型进行训练
    4. 最后通过predict()方法预测结果
    5. 对模型的评估score()方法等
  • 聚类分析
    • 常用聚类分析算法
    • 与分类不同,聚类分析是在没有给定划分类别的情况下,根据数据相似度进行样本分组的一种方法.与分类模型需要使用有类标记样本构成的训练数据不同,聚类模型可疑建立在吴磊标记的数据上,是一种非监督的学习算法.聚类的输入是一组为被标记的样本,聚类根据数据自身距离或相似度将其划分为若干组,划分的原则是组内距离最小化而组件距离最大化.
    • 类别
      包括主要算法
      划分(分裂)方法 K-Means算法(K-均值),K-MEDOIDS算法(K-中心点),CLARANS算法(基于选择的算法)
      层次分析方法 BIRCH算法(平衡迭代规约和聚类),CURE算法(代表点聚类),CHAMLEON算法
      基于密度的方法 DBSCAN算法(基于密度连接区域).DENCLUE算法(密度分布函数),OPTICS算法(对象识别排序)
      基于网络的方法 STING(统计信息网络),CLIOUE算法(聚类高维空间),WAVE-CLUSTER算法(小波变换)
      基于模型的方法

      统计学方法,神经网络方法

    • 聚类分析的算法
      • 算法名称
        算法描述
        K-Means K-均值聚类也称为快速聚类法,在最小化误差函数的基础上家境数据划分为预订的类数K,该算法原理简单并便于处理处理数据
        K-中心点 K-均值算法对孤立点的敏感性, K-中心点算法不采用簇中对象的平均值作为簇中心,而选用簇中离平均值最近的对象作为簇中心
        系统聚类 系统聚类也称为多层次聚类,分类的单位由高到低呈树形结构,且所处的为孩子越低,其包含的对象就越少,但这些对象间的共同特征越多,该聚类的方法只适合小数据量的时候使用,数据量大的时候速度会非常快
    • K-Means聚类算法
      •  K-Means算法十典型的基于距离的非层次聚类算法,在最小化误差函数的基础上将数据划分为预定的类数K,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大.
      • 算法过程
        1. 从N个样本书中随机选取K个对象作为初始的聚类中心
        2. 分别计算每个样本到各个聚类中心的距离,将对象分配到聚类中
        3. 所有对象分配完成后,重新计算K个聚类中心.
        4. 与前一次计算得到的K个聚类中心比较,如果聚类中心发生变化转第2步, 否则转第5步
        5. 当质心不发生变化时停止输出聚类结果
      • 聚类的结果可能依赖初始聚类中心的随机选择,可能使得结果严重偏离全局最优分类,实践中,为了得到较好的效果,通常选择不同的初始聚类中心,多次运行K-Means算法,在所有对象分配完成后,重新计算K个聚类中心时,对于连续数据,聚类中心取簇的均值,但是当样本的某些属性是分类变量时,均值可能无定义,可疑使用K-众数方法
      • 数据类型与相似性的度量
        • 连续属性
        • 对于连续属性,要先对个属性值进行零 - 均值规范, 再进行距离的计算.在K-Means聚类算法中,一般需要度量样本之间的距离,样本与簇之间的距离以及簇与簇之间的距离
        • 度量样本之间的相似性最常用的是欧几里得距离,曼哈顿距离和闵可夫斯基距离;样本与簇之间的距离可以用样本到簇中心的距离d(ei,x);簇与簇之间的距离剋用簇中心的距离d(ei,ej)
        • 欧几里得距离:
          • d(i,j) = ((xi1 - xj1)2 + (xi2 - xj2)2 + ... + (xip - xjp)2)1/2
        • 曼哈顿距离:
          • d(i,j) = |xi1 - xj1| + |xi1 - xj1| + ... + |xip - xjp|
        • 闵可夫斯基距离:
          • d(i,j) = ((|xi1 - xj1|)q + (|xi2 - xj2|)q + ... + (|xip - xjp|)q)1/2
        • q为正整数, q=1时,即为曼哈顿距离,;q=2时即为欧几里得距离
      • 目标函数
        • 使用误差平方和SSE作为度量聚类质量的目标函数,对于两种不同的聚类结果,训着误差平方和较小的分类结果.
        • 连续属性的SSE计算公式为:
          • SSE = ∑Ki=1x€Eidist(ei, x)2
        • 文档数据的SSE计算公式为:
          • SE = ∑Ki=1x€Eicos(ei, x)2
        • 簇Ei的聚类中心ei计算公式为
          • ei = 1/nix€Eix
        • 符号
          含义
          符号
          含义
          k 聚类簇的个数 ei 簇Ei的聚类中心
          Ei 第i个簇 ni 第i个簇中样本的个数
          x 对象(样本)
        • 消费行为数据:
      • ID
        R(最近一次消费时间间隔)
        F(消费频率)
        M(消费总金额)
        1 37 4 579
        2 35 3 616
        3 25 10 394
        4 52 2 111
        5 36 7 521
        6 41 5 225
        7 56 3 118
        8 37 5 793
        9 54 2 111
        10 5 18 1086
      • 采用K-Means聚类算法,设定聚类个数K为3,最大迭代次数为500次,距离函数取欧式距离
      1. import pandas as pd
      2. k = 3 # 聚类的类别
      3. iteration = 500 # 聚类最大循环次数
      4. data = pd.read_csv("sales_bak.csv",sep=",",header=None,
      5. names=["ID", "R", "F", "M"])
      6. data_zs = 1.0*(data - data.mean()) / data.std() # 数据标准化
      7. from sklearn.cluster import KMeans
      8. model = KMeans(n_clusters=k, n_jobs=4, max_iter=iteration) # 分为k类并发数4
      9. model.fit(data_zs) # 开始聚类
      10.  
      11. # 打印结果
      12. r1 = pd.Series(model.labels_).value # 统计各个类别的数目
      13. r2 = pd.DataFrame(model.cluster_centers_) # 找到聚类中心
      14. r = pd.concat([r2,r1], axis=1) # 横向连接(0时纵向),得到聚类中心对应的类别下的数目
      15. r.columns = list(data.column) + [u'类别数目'] # 重命名表头
      16. print r
      17.  
      18. # 详细输出原始数据机器类别
      19. r = pd.concat([data, pd.Series(model.labels_, index=data.index)], axis=1) # 详细输出每个样本对应的类别
      20. r.columns = list(data.columns) + [u'聚类类别'] # 重命名表头
      21. r.to_excel("sales.xlxs")
    • 事实上,Scikit-Learn中的K-Means算法仅仅支持欧式距离,原因在于采用其他的距离并不一定能够保证算法的收敛性
    • 然后用pandas和Matplotlib绘制的不同客户分群的概率密度函数图,通过这些图能直观的比较不同客户群的价值
  • 聚类分析算法评价
    • 聚类分析仅根据样本数据本身将样本分组,其目标时实现组内的对象相互之间时相似的(相关的),而不同组中的对象时不同的(不相关),组内的相似性越大,组间差别越大,聚类效果就越好
    • purity评价法
      • purity方法时极为简单的一种聚类评价方法,只需计算正确聚类占总数的比例

        • purity(x,y) = 1/n∑kmax| xkΩ yi |
      • 其中,x = (x1, x2, ... xk)时聚类的集合.xk表示第k个聚类的集合.y=(y1,y2,...yk)表示需要被聚类的集合,yi表示第i个聚类对象.n表示被聚类集合对象的总数
    • RI评价法
      • 实际上,这是一种用排列组合原理来对聚类进行评价的手段,RI评价公式如下.

        • RI = R + W / R + M + D + W
      • 其中,R是指被聚在一类两个对象被正确分类了,w是指不应该被聚在一类的两个对象被正确分开.M是指不应该放在一起的对象被错误的放在一类,D是指不应该分开的对象被错误的分开了.
    • F指评价法
      • 这是基于上述RI方法衍生出的一个方法,F评价公式如下:

        • Fa = (I + α2)pr / α2ß + r
      • 其中, p = R / R + M, r = R / (R + D)
      • 实际上RI方法就是吧准确率P和召回率r看的同等重要,事实上,有时候我们可能需要某一特性更多一点,这时候就适合使用F值方法.
    • python主要聚类分析算法:
      • python的聚类相关的算法主要在Scikit-Learn中, python里面实现的聚类主要包括K-Means聚类,层次聚类, FCM以及神经网络聚类,
      • 对象名
        函数功能
        所属工具箱
        KMeans K均值聚类 sklearn.cluster
        AffinityPropahation 吸引力传播聚类,2007年提出,几乎优于所有的其他方法,不需要指定聚类数,单运行效率较低 sklearn.cluster
        MeanShift 均值漂移聚类 sklearn.cluster
        SpectralClustring 谱聚类,具有效果比k均值好,速度比K均值快等特点 sklearn.cluster
        AgglomerativeClustering 层次聚类,给出一棵聚类层次树 sklearn.cluster
        DBSCAN 具有噪声的基于密度的聚类方法 sklearn.cluster
        BIRCH 综合的层次聚类算法,可以处理大规模数据的聚类 sklearn.cluster
      • 这些不同模型的使用方法是大同小异的,都是基本先使用对应的函数建立模型,然后用.fit()方法来训练模型,训练好之后,就可以用.label_方法给出样本数据的标签,或者用.predict()方法预测新的输入标签.
      • 此外,Scipy库也提供了一个聚类子库scipy.cluster,里边提供了一些聚类算法,如层次聚类等,但没有Scikit-Learn那么完善和丰富.scipy.cluster的好处黑丝它的函数名和功能基本根python时一一对应的,如层次聚类的linkage,dendrogram等,因此已经熟悉python的朋友,可疑尝试使用Scipy提供的聚类库.
        1. # -*- coding:utf-8 -*-
        2.  
        3. import sys
        4.  
        5. reload(sys)
        6. sys.setdefaultencoding("utf-8")
        7.  
        8. """
        9. 使用神经网络算法预测销量高低
        10. """
        11. from sklearn.manifold import TSNE
        12. import pandas as pd
        13.  
        14. k = 3 # 聚类的类别
        15. iteration = 500 # 聚类最大循环次数
        16.  
        17. data = pd.read_csv("sales_bak.csv", sep="\t",header=None,
        18. names=["a", "b", "c"]) # 读取csv中的数据
        19. data_zs = 1.0 * (data - data.mean()) / data.std() # 数据标准化
        20. tsne = TSNE() # 实例化一个TENS空白的对象
        21. tsne.fit_transform(data_zs) # 进行数据降维
        22. tsne = pd.DataFrame(tsne.embedding_,index = data_zs.index) # 转换数据格式
        23.  
        24. import matplotlib.pyplot as plt
        25. plt.rcParams['font,sans-serif'] = ['SimHei'] # 用来正常显示中文标签
        26. plt.rcParams['zxes.unicode_minus'] = False # 用来正常显示负号
        27. d = tsne[r[u'聚类类别'] == 0 ]
        28. plt.plot(d[0], d[1], 'r.')
        29. d = tsne[r[u'聚类类别'] == 1 ]
        30. plt.plot(d[0], d[1], 'go')
        31. d = tsne[r[u'聚类类别'] == 2]
        32. plt.plot(d[0], d[1], 'b*')
        33. plt.show()

python分类预测模型的特点的更多相关文章

  1. python 分类

    python分类.机器学习连接 http://blog.csdn.net/eastmount/article/details/50473675 python机器学习列表 http://blog.csd ...

  2. python分类

    python是一种动态解释性的强类型语言. python下分几个类别,分别是cpython,jypython,ironpython,pypy等等,这些属于不同的解释器,但编写规范只有一个就是pytho ...

  3. 2017-12-14python全栈9期第一天第四节之python分类

    python的环境. 编译型:一次性将所有程序编译成二进制文件. 缺点:开发效率低,不能跨平台. 优点:运行速度快. :C,C++等等. 解释型:当程序执行时,一行一行的解释. 优点:开发效率高,可以 ...

  4. Python基础之Python分类

    python环境 编译型: 一次性将所有程序编译成二级制文件,开发效率极低,因为一旦出现BUG所有的程序需要全部重新编译 缺点: 开发效率低,不能跨平台 优点: 执行速度快 解释型: 当程序执行时,一 ...

  5. Python分类模型构建

    分离训练集测试集 from sklearn.model_selection import train_test_split eg: X_train, X_test, y_train, y_test = ...

  6. 小象学院Python数据分析第二期【升级版】

    点击了解更多Python课程>>> 小象学院Python数据分析第二期[升级版] 主讲老师: 梁斌 资深算法工程师 查尔斯特大学(Charles Sturt University)计 ...

  7. [转]Python学习资料和教程pdf

    开发工具: Python语言集成开发环境 Wingware WingIDE Professional v3.2.12 Python语言集成开发环境 Wingware WingIDE Professio ...

  8. 编程零基础应当如何开始学习 Python?

    提前说一下,这篇福利多多,别的不说,直接让你玩回最有手感的怀旧游戏,参数贴图很方便自己可以根据喜好修改哦. 本篇通过以下四块展开,提供大量资源对应. 选一个好版本 有没有看过<在下坂本,有何贵干 ...

  9. python基础1之python介绍、安装、变量和字符编码、数据类型、输入输出、数据运算、循环

    开启python之路 内容概要: 一.python介绍 二.安装 三.第一个python程序 四.变量和字符编码 五.用户输入 六.数据类型 七.一切皆对象 八.数据运算 九.if else 流程判断 ...

随机推荐

  1. (转载)Solr4.x在Tomcat下的部署

    Step1 下载安装包: 下载最新版本安装包 点击此处下载Tomcat    点击此处下载Solr Step2 解压: 解压Tomcat和Solr Step3 拷贝War包: 拷贝\solr-4.x\ ...

  2. Codeforces - 1194C - From S To T - 子序列 - 排序

    https://codeforces.com/contest/1194/problem/C 好像没什么好说的,要能构造s必须是t的子序列,并且相差的字符集合d是p的子集. 用双指针法求两遍子序列就可以 ...

  3. linux查看进程数

    命令行: $ ps -ef | wc -l 如果想匹配某个关键词的话,加上grep,下面命令是匹配关键词 “XXX”,并统计含有该关键词的进程数 $ ps -ef | grep XXX | wc -l

  4. 【问题解决方案】git中的文件的重命名

    环境: win7 git bash+GitHub 问题: 如果直接在文件夹中手动重命名,Git会判定为删除了旧文件,添加了新文件 版本回退后使用mv命令进行重命名 $ git reset --hard ...

  5. redis学习(二)

    简单了解一下 1.build.gradle中添加 依赖  org.springframework.boot:spring-boot-starter-data-redis //定义依赖:声明项目中需要哪 ...

  6. shell截取小数点前后的子串

  7. 一、Spring Boot系列:通过Maven创建第一个项目

    1.打开idea选择创建工程 2.创建maven工程,同时选择jdk1.8 注意:不需要勾选其他选项 3.填写项目名称 4.创建好maven项目后,在pom.xml文件中导入Spring Boot需要 ...

  8. java 抽象的概念 抽象类的使用

    package java10; /* 抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束 抽象类:抽象方法所在的类,必须是抽象类才行.在class之前写上abstract即可 如何 ...

  9. java String练习题

    package java07; /* 题目: 定义一个方法,把数组{1,2,3}按照指定格式拼接成一个字符串,格式参照如下:[word1#word2#word3] 思路: 1.首先准备一个int[]数 ...

  10. java正则表达式移除网页中注释代码

    /** * 移除网页中注释掉的代码 * * @param str * @return */ public static String removedisablecode(String str) { P ...