项目1:基于sklearn的数据分类挖掘
一、项目任务
①熟悉sklearn数据挖掘的根本功能.
②进展用朴素贝叶斯、KNN、决策树C4.5、SVM算法进展数据分类分析.
二、项目环境与条件
➢ s
➢ numpy-1.11.3+mkl-cp27-cp27m-win_amd
三、实验数据
Iris数据集
Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理.Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集.数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性.可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于〔Setosa,Versicolour,Virginica〕三个种类中的哪一类.
Digits数据集
美国著名数据集NIST的子集,模式识别常用实验数据集,图像属于灰度图像.分辨率为8x8
四、项目内容与过程
从sklearn中读取iris和digits数据集并测试打印 from sklearn import datasets iris = datasets.load_iris<> digits = datasets.load_digits<> 打印的数据集存在numpy.ndarray中,ndarray会自动省略较长矩阵的中间局部. Iris数据集的样本数据为其花瓣的各项属性
.
Digits数据集的样本数据为手写数字图像的像素值
引入sklearn的model_selection使用train_test_split划分digits数据集,训练集和测试集比例为8:2
from sklearn.model_selection import train_test_split x_train,x_test,y_train,y_test=train_test_split print 'x_train:',x_train,'\\nx_test:',x_test,'\\ny_train:',y_train,'\\ny_test:',y_test neighbors.KNeighborsClassifier模块调用算法,使用classification_report查看预测结果的准确率和召回率from sklearn.metrics import classification_report from sklearn import neighbors clf = neighbors.KNeighborsClassifier<> clf.fit y_pred=clf.predict print classification_report from sklearn.svm import SVC clf = SVC<> clf.fit y_pred=clf.predict print classification_report KNN的预测结果:所有数字的预测正确率几乎达到了100% SVM的预测结果:对局部数字的预测误差较大,根本情况不如KNN 考虑SVM分类器的特性,在分类前对特征值进展标准化后再分类:from sklearn import preprocessing min_max_scaler = preprocessing.MinMaxScaler<> x_train = min_max_scaler.fit_transform x_test = min_max_scaler.fit_transform 标准化数据后SVM的预测结果达到了KNN的准度: from sklearn.model_selection import train_test_split x_train,x_test,y_train,y_test=train_test_split from sklearn.metrics import classification_report .from sklearn import naive_bayes clf = naive_bayes.GaussianNB<> clf.fit y_pred=clf.predict print classification_report from sklearn import tree clf = tree.DecisionTreeClassifier<> clf.fit y_pred=clf.predict print classification_report 决策树和贝叶斯都有较好的分类效果 五、实验结果分析为什么用svm和knn处理digits数据集,用tree和bayes处理iris数据集,这是一个经验问题.
我们都知道digits数据集的每一个特征就是像素点的像素值,他们的维度都是在0~255以内;像素点之间的维度完全一致,互相没有优先级.这种情况下使用线性分类器如KNN、SVM、Logistic会有更好的效果.
而iris数据集虽然长度和宽度维度差不多一样,但是两者之间有优先级的区分,按照人脑分类的思维方式可能是先按照长度判断再按照宽度等思维方式,很接近决策树的算法原理,贝叶斯同样.所以概率性分类器有更好的效果.
实际情况也是使用SVM预测iris的结果和Bayes预测digits的结果不甚理想〔虽然也有很高的准度了〕.
当然,通过调整分类器的参数,能使各个分类器的预测结果都达到满意结果,综合表现还是KNN更抢眼,能在各种数据集面前都有出色表现,但KNN在训练样本数量达到一定程度后,有超高的计算复杂度.所以面对实际情况,选用什么分类器,如何调节参数都是值得深思的问题.
.
项目2:基于sklearn的数据聚类挖掘
一、实验任务
①熟悉sklearn数据挖掘平台的根本功能. ②用K-Means进展数据聚类分析.
二、实验环境与条件
➢ numpy-1.11.3+mkl-cp27-cp27m-win_amd
三、实验数据
随机产生的100个坐标点,X围为[0,100]
四、实验内容与过程
产生的随机值在0-100,因为sklearn的k-means模块要求输入的坐标形式为
[[x0,y0],…,[x…,y…],…,[xn,yn]],而实际产生的是[x0,…,xn]和[y0,…,yn],所以还需要对坐标进展一次转换
from sklearn.cluster import KMeans import numpy as np import matplotlib.pyplot as plt import random def create_coordinate<>: x,y=create_coordinate<> old_coordinate=[[x[i],y[i]] for i in range<100>] coordinate=np.array print old_coordinate x,y=[],[] for i in range<100>: x.append> y.append> return x,y .产生的随机坐标值:
使用k-means对坐标点分为3类,对0类标为红色,1类标为绿色,2类标为蓝色.并将三类坐标的中心点以‘*’表示在图中 def create_chart: print kmeans.predict<[[0, 0], [50,50],[100, 100]]> create_chart 对新点的预测: 221 plt.grid<> plt.show<> plt.scatter<[i[0] for i in center],[i[1] for i in center],c='m',s=600,marker='*'> plt.scatter plt.scatter plt.scatter x_0=[x[i] for i in range> if label[i]==0] x_1=[x[i] for i in range> if label[i]==1] x_2=[x[i] for i in range> if label[i]==2] y_0=[y[i] for i in range> if label[i]==0] y_1=[y[i] for i in range> if label[i]==1] y_2=[y[i] for i in range> if label[i]==2] kmeans = KMeans.fit 点的聚类情况: 五、实验结果分析这次试验,使用sklearn的k-means对100个坐标点聚类.K-means因为其本身算法的原因,点数越多聚类速度越慢.所以在20个点和100个点的聚类时间上有很大差距.
聚类问题不同于分类问题,没有明确的预测和分类结果,聚类时对数据的边界可能会各不一样,聚类问题在用户画像/个性化推荐等应用上有较好地发挥.
.
实验3:在Python程序中引用sklearn
一、实验任务
①用Python开发一个综合局部挖掘算法的演示程序,核心算法来自sklearn类库. ②演示程序界面友好.
二、实验环境与条件
➢ numpy-1.11.3+mkl-cp27-cp27m-win_amd ➢ PyQt4
三、实验数据
Iris数据集
Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理.Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集.数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性.可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于〔Setosa,Versicolour,Virginica〕三个种类中的哪一类.
Digits数据集
美国著名数据集NIST的子集,模式识别常用实验数据集,图像属于灰度图像.分辨率为8x8
四、实验内容与过程
使用PyQt4创建windows窗体,并提供可选择的分类方式:
➢ SVM——支持向量机算法 ➢ KNN——K邻近算法 ➢ Bayes——朴素贝叶斯算法 ➢ Tree——
➢ Logistic——Logistic回归算法
.
可选择的归一化方式:
➢ Standard-标准归一化 ➢ MaxAndMin-最大最小归一化
可选择的验证比例
➢ 可选X围——<0,1>
可调节的分类器参数
➢ 根据具体分类器设置参数
局部代码
➢ 确认按钮响应事件
def OKPushButton_OnClick: from sklearn.metrics import classification_report self.descTextEdit.setText> y_test,y_pred=self.load_datasets_and_classify data_name = self.data_boBox.currentText<> classify_name = self.classify_boBox.currentText<> normalization_name = self.normalization_boBox.currentText<> parameter_string = self.parameter_text.toPlainText<> validation_string = self.validation_text.text<> ➢ 分类算法执行 if validation_string !='': try: rate=float except: def load_datasets_and_classify\\ from sklearn import datasets from sklearn.model_selection import train_test_split : .self.alert_info return
if data_name == 'iris':
origin_data=datasets.load_iris<> origin_data=datasets.load_digits<> self.alert_info return
elif data_name == 'digits': else:
if normalization_name=='standard':
from sklearn import preprocessing
scaler = preprocessing.StandardScaler<>.fit scaler.transform scaler.transformfrom sklearn import preprocessing
min_max_scaler = preprocessing.MinMaxScaler<> x_train = min_max_scaler.fit_transform x_test = min_max_scaler.fit_transform passself.alert_info return
elif normalization_name=='max_min':
elif normalization_name=='none': else:
➢ 程序演示结果
五、实验结果分析
使用PyQt4创建windows窗体,然后结合实验1和2的局部代码生成代码演示程序. 说句实话,不太清楚这个试验到底要干嘛,为了给演示程序的界面添加控件就花了很多时间,算是学习到如何使用python创建windows应用程序了.
.