iris.zip

  • pdcfl
    了解作者
  • Python
    开发工具
  • 4KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 1
    下载次数
  • 2019-07-12 07:43
    上传日期
数据挖掘入门, 鸢尾属植物 iris示例代码
iris.zip
  • iris.py
    8.9KB
内容介绍
# -*- coding: utf-8 -*- """ Created on Fri Aug 18 09:50:29 2017 @author: qdnhabc """ #### ------------------------------------------------------------------- ### # 利用 Python 练习数据挖掘 URL:http://python.jobbole.com/83563/ # 数据导入和可视化 import urllib2 url = "http://aima.cs.berkeley.edu/data/iris.csv" u = urllib2.urlopen(url) localFiel = open("iris.csv", "w") localFiel.write(u.read()) localFiel.close() """ 数据来源: 伯克利大学 数据包含鸢尾花(iris)数据集,包含了三种鸢尾花(山鸢尾、维吉尼亚鸢尾和变色鸢尾)的各 50 个数据样本的多元数据集 每个样本有四个特征,即花萼(sepal)和花瓣(petal)的长度和宽度,以厘米为单位 数据集有 5 列,前四列包含着特征值,最后一列代表着样本类型 """ # csv 文件很容易被 numpy 库的 genfromtxt 方法解析 from numpy import genfromtxt,zeros # 读取前 4 列 data = genfromtxt("iris.csv", delimiter=",", usecols=(0, 1, 2, 3)) # 读取第 5 列 target = genfromtxt("iris.csv", delimiter=",", usecols=(4), dtype=str) print "data: ", data print "target: ", target print "data.shape: ", data.shape print "target.shape: ", target.shape # 查看有多少种样本类型以及它们的名字 print set(target) # 使用 pylab 库(matplotlib的接口)的 plotting 方法可以建一个二维散点图让我们在两个维度上分析数据集的两个特征值 from pylab import plot, show, close # 蓝色点代表山鸢尾、红色点代表变色鸢尾、绿色点代表维吉尼亚鸢尾 # 第一和第三维度是花萼的长度和花瓣的长度 plot(data[target == "setosa", 0], data[target == "setosa", 2], "bo") plot(data[target == "versicolor", 0], data[target == "versicolor", 2], "ro") plot(data[target == "virginica", 0], data[target == "virginica", 2], "go") # show() close() # 另一种常用的查看数据的方法是分特性绘制直方图 # 下面的代码可以绘制数据中每一类型的第一个特性(花萼的长度) from pylab import figure, subplot, hist, xlim, show xmin = min(data[:, 0]) xmax = max(data[:, 0]) figure() subplot(411) hist(data[target == "setosa", 0], color="b", alpha=.7) xlim(xmin, xmax) subplot(412) hist(data[target == "versicolor", 0], color="r", alpha=.7) xlim(xmin, xmax) subplot(413) hist(data[target == "virginica", 0], color="g", alpha=.7) xlim(xmin, xmax) subplot(414) hist(data[:, 0], color="y", alpha=.7) xlim(xmin, xmax) # show() close() # 分类 # ------ 高斯朴素贝叶斯分类 ------ # 把字符串数组转型成整型数据 t = zeros(len(target)) t[target == "setosa"] = 1 t[target == "versicolor"] = 2 t[target == "virginica"] = 3 # 模型实例化和训练分类器 from sklearn.naive_bayes import GaussianNB classifier = GaussianNB() classifier.fit(data, t) # 分类器可以由 predict 方法完成,并且只要输出一个样例就可以很简单的检测 print classifier.predict(data[0]) print t[0] # 评估分类器 # 通过从源数据集中随机抽取样本把数据分为训练集和测试集,然后使用训练集的数据来训练分类器,并使用测试集来测试分类器 from sklearn import cross_validation train, test, t_train, t_test = cross_validation.train_test_split(data, t, test_size=0.4, random_state=0) # 训练分类器并输出精确度 classifier.fit(train, t_train) print classifier.score(test, t_test) # 另一个估计分类器表现的工具叫做混淆矩阵。在此矩阵中每列代表一个预测类的实例,每行代表一个实际类的实例 from sklearn.metrics import confusion_matrix print confusion_matrix(classifier.predict(test), t_test) """ 如果我们牢记所有正确的猜测都在表格的对角线上,那么观测表格的错误就很容易了,即 对角线以外的非零值 """ # 可以展示分类器性能的完整报告的方法也是很好用的 from sklearn.metrics import classification_report print classification_report(classifier.predict(test), t_test, target_names=["setosa", "versicolor", "virginica"]) # ------ 聚类 ------ from sklearn.cluster import KMeans kmeans = KMeans(n_clusters=3, init="random") kmeans.fit(data) c = kmeans.predict(data) # 估计群集的结果,与使用完整性得分和同质性得分计算而得的标签作比较 from sklearn.metrics import completeness_score, homogeneity_score print completeness_score(t, c) print homogeneity_score(t, c) """ 当大部分数据点属于一个给定的类并且属于同一个群集,那么完整性得分就趋向于 1 当所有群集都几乎只包含某个单一类的数据点时同质性得分就趋向于 1 """ # 把集群可视化并和带有真实标签的做可视化比较 figure() subplot(211) plot(data[t == 1, 0], data[t == 1, 2], "bo") plot(data[t == 2, 0], data[t == 2, 2], "ro") plot(data[t == 3, 0], data[t == 3, 2], "go") subplot(212) plot(data[c == 1, 0], data[c == 1, 2], "bo", alpha=.7) plot(data[c == 2, 0], data[c == 2, 2], "ro", alpha=.7) plot(data[c == 0, 0], data[c == 0, 2], "go", alpha=.7) # show() close() # ------ 回归 ------ # 为了应用线性回归,我们需要建立一个由上所述的综合数据集 from numpy.random import rand x = rand(40, 1) y = x*x*x + rand(40, 1) / 5 from sklearn.linear_model import LinearRegression linreg = LinearRegression() linreg.fit(x, y) # 我们可以通过把拟合线和实际数据点画在同一幅图上来评估结果 from numpy import linspace, matrix xx = linspace(0, 1, 40) plot(x, y, "o", xx, linreg.predict(matrix(xx).T), "--r") # show() close() # 我们还可以使用均方误差来量化模型和原始数据的拟合度 from sklearn.metrics import mean_squared_error print mean_squared_error(linreg.predict(x), y) """ 该指标度量了预期的拟合线和真实数据之间的距离平方,当拟合线很完美时该值为 0 """ # ------ 相关 ------ """ 我们通过研究相关性来理解成对的变量之间是否相关,相关性的强弱。此类分析帮助我们精确定位被依赖的重要变量。 最好的相关方法是皮尔逊积矩相关系数,它是由两个变量的协方差除以他们的标准差的乘机计算而来 """ from numpy import corrcoef corr = corrcoef(data.T) print corr from pylab import pcolor, colorbar, xticks, yticks, close from numpy import arange pcolor(corr) colorbar() xticks(arange(0.5, 4.5), ['sepal length', 'sepal width', 'petal length', 'petal width'],rotation=-20) yticks(arange(0.5,4.5),['sepal length', 'sepal width', 'petal length', 'petal width'],rotation=-20) # show() close() # ------ 降维 ------ # 最著名的降维技术之一就是主成分分析 from sklearn.decomposition import PCA pca = PCA(n_components=2) pcad = pca.fit_transform(data) plot(pcad[target == "setosa", 0], pcad[target == "setosa", 1], "bo") plot(pcad[target == "versicolor", 0], pcad[target == "versicolor", 1], "ro") plot(pcad[target == "virginica", 0], pcad[target == "virginica", 1], "go") # show() close() # PCA 将空间数据方差最大化,我们可以通过方差比判断 PCs 包含的信息量 print pca.explained_variance_ratio_ # 输出:[ 0.92461621 0.05301557] # 现在我们知道第一个 PC 占原始数据的 92% 的信息量而第二个占剩下的 5%,我们还可以输出在转化过程中 # 丢失的信息量 print 1 - sum(pca.explained_variance_) #1-sum(pca.explained_variance_ratio_) # 此时我们可以是应用逆变换还原原始数据 data_inv = pca.inverse_transform(pcad) # 可以证明的是,由于信息丢失逆变换不能给出准确的原始数据,我们可以估算逆变换的结果和原始数据的相似度 print abs(sum(sum(data - data_inv))) # 通过改变主成分的数值来计算我们能够覆盖多少信息量是很有趣的 for i in ran
评论
    相关推荐
    • matlabcnhelp.rar
      matlab中文帮助很难找的,快速下载
    • MobilePolice.rar
      移动警察,车牌识别,车牌定位系统源代码,已经运用在移动车载稽查系统中。
    • SVM(matlab).rar
      支持向量机(SVM)实现的分类算法源码[matlab]
    • svm.zip
      用MATLAB编写的svm源程序,可以实现支持向量机,用于特征分类或提取
    • Classification-MatLab-Toolbox.rar
      模式识别matlab工具箱,包括SVM,ICA,PCA,NN等等模式识别算法,很有参考价值
    • VC++人脸定位实例.rar
      一个经典的人脸识别算法实例,提供人脸五官定位具体算法及两种实现流程.
    • QPSK_Simulink.rar
      QPSK的Matlab/Simulink的调制解调仿真系统,给出接收信号眼图及系统仿真误码率,包含载波恢复,匹配滤波,定时恢复等重要模块,帮助理解QPSK的系统
    • LPRBPDemo2009KV.rar
      车牌识别,神经网络算法,识别率高达95%,识别时间低于80ms。
    • MODULATION.RAR
      这个源程序代码包提供了通信系统中BPSK,QPSK,OQPSK,MSK,MSK2,GMSK,QAM,QAM16等调制解调方式 用matlab的实现,以及它们在AWGN和Rayleigh信道下的通信系统实现及误码率性能
    • algorithms.rar
      十大算法论文,包括遗传算法,模拟退火,蒙特卡罗法等等,对于初学者很有帮助!!