python分类预测模型的特点
python分类预测模型的特点
- 模型模型特点位于
SVM 强大的模型,可以用来回归,预测,分类等,而根据选取不同的和函数,模型可以是线性的/非线性的 sklearn.svm 决策树 基于"分类讨论,逐步细化"思想的分类模型,模型直观,易解释 sklearn.tree 朴素贝叶斯 基于概率思想的简单有效的分类模型,能够给出容易理解的概率解释 sklearn.naive_bayes 神经网络 具有强大的拟合能力,可疑用于拟合,分类等,它有多个增强版本,如递神经网络,卷积神经网络,自编吗器等,这些是深度学习的模型基础 Keras 逻辑回归 比较基础的线性分类模型,很多时候是简单有效的选择 sklearn.linear_model 随机森林 思想跟决策树类似,精度通常比决策树要高,缺点是由于随机性, 丧失了决策树的可解释性 sklearn.ensemble - python建模的步骤:
- 建立一个对象(这个对象是空白的,需要进一步训练)
- 然后,我们要设置模型的参数
- 接着就是通过fit()方法对模型进行训练
- 最后通过predict()方法预测结果
- 对模型的评估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,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大.
- 算法过程
- 从N个样本书中随机选取K个对象作为初始的聚类中心
- 分别计算每个样本到各个聚类中心的距离,将对象分配到聚类中
- 所有对象分配完成后,重新计算K个聚类中心.
- 与前一次计算得到的K个聚类中心比较,如果聚类中心发生变化转第2步, 否则转第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=1∑x€Eidist(ei, x)2
- 文档数据的SSE计算公式为:
- SE = ∑Ki=1∑x€Eicos(ei, x)2
- 簇Ei的聚类中心ei计算公式为
- ei = 1/ni∑x€Eix
- 符号含义符号含义
k 聚类簇的个数 ei 簇Ei的聚类中心 Ei 第i个簇 ni 第i个簇中样本的个数 x 对象(样本)
- 消费行为数据:
- IDR(最近一次消费时间间隔)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次,距离函数取欧式距离
- import pandas as pd
- k = 3 # 聚类的类别
- iteration = 500 # 聚类最大循环次数
- data = pd.read_csv("sales_bak.csv",sep=",",header=None,
- names=["ID", "R", "F", "M"])
- data_zs = 1.0*(data - data.mean()) / data.std() # 数据标准化
- from sklearn.cluster import KMeans
- model = KMeans(n_clusters=k, n_jobs=4, max_iter=iteration) # 分为k类并发数4
- model.fit(data_zs) # 开始聚类
- # 打印结果
- r1 = pd.Series(model.labels_).value # 统计各个类别的数目
- r2 = pd.DataFrame(model.cluster_centers_) # 找到聚类中心
- r = pd.concat([r2,r1], axis=1) # 横向连接(0时纵向),得到聚类中心对应的类别下的数目
- r.columns = list(data.column) + [u'类别数目'] # 重命名表头
- print r
- # 详细输出原始数据机器类别
- r = pd.concat([data, pd.Series(model.labels_, index=data.index)], axis=1) # 详细输出每个样本对应的类别
- r.columns = list(data.columns) + [u'聚类类别'] # 重命名表头
- r.to_excel("sales.xlxs")
- import pandas as pd
- 事实上,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表示被聚类集合对象的总数
- purity方法时极为简单的一种聚类评价方法,只需计算正确聚类占总数的比例
- RI评价法
- 实际上,这是一种用排列组合原理来对聚类进行评价的手段,RI评价公式如下.
- RI = R + W / R + M + D + W
- 其中,R是指被聚在一类两个对象被正确分类了,w是指不应该被聚在一类的两个对象被正确分开.M是指不应该放在一起的对象被错误的放在一类,D是指不应该分开的对象被错误的分开了.
- 实际上,这是一种用排列组合原理来对聚类进行评价的手段,RI评价公式如下.
- F指评价法
- 这是基于上述RI方法衍生出的一个方法,F评价公式如下:
- Fa = (I + α2)pr / α2ß + r
- 其中, p = R / R + M, r = R / (R + D)
- 实际上RI方法就是吧准确率P和召回率r看的同等重要,事实上,有时候我们可能需要某一特性更多一点,这时候就适合使用F值方法.
- 这是基于上述RI方法衍生出的一个方法,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提供的聚类库.
- # -*- coding:utf-8 -*-
- import sys
- reload(sys)
- sys.setdefaultencoding("utf-8")
- """
- 使用神经网络算法预测销量高低
- """
- from sklearn.manifold import TSNE
- import pandas as pd
- k = 3 # 聚类的类别
- iteration = 500 # 聚类最大循环次数
- data = pd.read_csv("sales_bak.csv", sep="\t",header=None,
- names=["a", "b", "c"]) # 读取csv中的数据
- data_zs = 1.0 * (data - data.mean()) / data.std() # 数据标准化
- tsne = TSNE() # 实例化一个TENS空白的对象
- tsne.fit_transform(data_zs) # 进行数据降维
- tsne = pd.DataFrame(tsne.embedding_,index = data_zs.index) # 转换数据格式
- import matplotlib.pyplot as plt
- plt.rcParams['font,sans-serif'] = ['SimHei'] # 用来正常显示中文标签
- plt.rcParams['zxes.unicode_minus'] = False # 用来正常显示负号
- d = tsne[r[u'聚类类别'] == 0 ]
- plt.plot(d[0], d[1], 'r.')
- d = tsne[r[u'聚类类别'] == 1 ]
- plt.plot(d[0], d[1], 'go')
- d = tsne[r[u'聚类类别'] == 2]
- plt.plot(d[0], d[1], 'b*')
- plt.show()
python分类预测模型的特点的更多相关文章
- python 分类
python分类.机器学习连接 http://blog.csdn.net/eastmount/article/details/50473675 python机器学习列表 http://blog.csd ...
- python分类
python是一种动态解释性的强类型语言. python下分几个类别,分别是cpython,jypython,ironpython,pypy等等,这些属于不同的解释器,但编写规范只有一个就是pytho ...
- 2017-12-14python全栈9期第一天第四节之python分类
python的环境. 编译型:一次性将所有程序编译成二进制文件. 缺点:开发效率低,不能跨平台. 优点:运行速度快. :C,C++等等. 解释型:当程序执行时,一行一行的解释. 优点:开发效率高,可以 ...
- Python基础之Python分类
python环境 编译型: 一次性将所有程序编译成二级制文件,开发效率极低,因为一旦出现BUG所有的程序需要全部重新编译 缺点: 开发效率低,不能跨平台 优点: 执行速度快 解释型: 当程序执行时,一 ...
- Python分类模型构建
分离训练集测试集 from sklearn.model_selection import train_test_split eg: X_train, X_test, y_train, y_test = ...
- 小象学院Python数据分析第二期【升级版】
点击了解更多Python课程>>> 小象学院Python数据分析第二期[升级版] 主讲老师: 梁斌 资深算法工程师 查尔斯特大学(Charles Sturt University)计 ...
- [转]Python学习资料和教程pdf
开发工具: Python语言集成开发环境 Wingware WingIDE Professional v3.2.12 Python语言集成开发环境 Wingware WingIDE Professio ...
- 编程零基础应当如何开始学习 Python?
提前说一下,这篇福利多多,别的不说,直接让你玩回最有手感的怀旧游戏,参数贴图很方便自己可以根据喜好修改哦. 本篇通过以下四块展开,提供大量资源对应. 选一个好版本 有没有看过<在下坂本,有何贵干 ...
- python基础1之python介绍、安装、变量和字符编码、数据类型、输入输出、数据运算、循环
开启python之路 内容概要: 一.python介绍 二.安装 三.第一个python程序 四.变量和字符编码 五.用户输入 六.数据类型 七.一切皆对象 八.数据运算 九.if else 流程判断 ...
随机推荐
- (转载)Solr4.x在Tomcat下的部署
Step1 下载安装包: 下载最新版本安装包 点击此处下载Tomcat 点击此处下载Solr Step2 解压: 解压Tomcat和Solr Step3 拷贝War包: 拷贝\solr-4.x\ ...
- Codeforces - 1194C - From S To T - 子序列 - 排序
https://codeforces.com/contest/1194/problem/C 好像没什么好说的,要能构造s必须是t的子序列,并且相差的字符集合d是p的子集. 用双指针法求两遍子序列就可以 ...
- linux查看进程数
命令行: $ ps -ef | wc -l 如果想匹配某个关键词的话,加上grep,下面命令是匹配关键词 “XXX”,并统计含有该关键词的进程数 $ ps -ef | grep XXX | wc -l
- 【问题解决方案】git中的文件的重命名
环境: win7 git bash+GitHub 问题: 如果直接在文件夹中手动重命名,Git会判定为删除了旧文件,添加了新文件 版本回退后使用mv命令进行重命名 $ git reset --hard ...
- redis学习(二)
简单了解一下 1.build.gradle中添加 依赖 org.springframework.boot:spring-boot-starter-data-redis //定义依赖:声明项目中需要哪 ...
- shell截取小数点前后的子串
- 一、Spring Boot系列:通过Maven创建第一个项目
1.打开idea选择创建工程 2.创建maven工程,同时选择jdk1.8 注意:不需要勾选其他选项 3.填写项目名称 4.创建好maven项目后,在pom.xml文件中导入Spring Boot需要 ...
- java 抽象的概念 抽象类的使用
package java10; /* 抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束 抽象类:抽象方法所在的类,必须是抽象类才行.在class之前写上abstract即可 如何 ...
- java String练习题
package java07; /* 题目: 定义一个方法,把数组{1,2,3}按照指定格式拼接成一个字符串,格式参照如下:[word1#word2#word3] 思路: 1.首先准备一个int[]数 ...
- java正则表达式移除网页中注释代码
/** * 移除网页中注释掉的代码 * * @param str * @return */ public static String removedisablecode(String str) { P ...