支持向量机分类器(Support Vector Classifer),根据训练样本的分布,搜索所有可能的线性分类器中最佳的那个。
使用支持向量机分类器处理Scikit-learn内部继承的手写体数字图片数据集。
#coding=UTF-8 ######手写体数据读取代码样例 #从sklearn.datasets里导入手写体数字加载器 from sklearn.datasets import load_digits #通过数据加载器获得手写体数字的数码图像数据,并储存在digits变量中 digits=load_digits() #检视数据规模和特征维度 digits.data.shape #[out]:(1797L, 64L) #输出结果表明:该手写体数字的数码图像数据共有1797条 #并且每幅图片是由8x8=64的像素矩阵表示 #依照惯例,对于没有直接提供测试样本的数据 #要通过数据分割获取75%的训练样本和25%的测试样本 ######手写体数据分割代码样例 #从sklearn.cross_validation中导入train_test_split用于数据分割 #若:from sklearn.cross_validation import train_test_split #会:DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20. # "This module will be removed in 0.20.", DeprecationWarning) #所以:sklearn.cross_validation报警告,将其改为sklearn.model_selection from sklearn.model_selection import train_test_split #随机选取75%的数据作为训练样本 #其余25%的数据作为测试样本 X_train,X_test,y_train,y_test=train_test_split(digits.data,digits.target,test_size=0.25,random_state=33) #分别检视训练与测试数据规模 print y_train.shape #[out]:(1347L,) print y_test.shape #[out]:(450L,) ######使用支持向量机(分类)对手写体数字图像进行识别 #从sklearn.preprocessing里导入数据标准化模块 from sklearn.preprocessing import StandardScaler #从sklearn.svm里导入基于线性假设的支持向量机分类器LinearSVC from sklearn.svm import LinearSVC #仍然需要对训练和测试的特征数据进行标准化 ss=StandardScaler() X_train=ss.fit_transform(X_train) X_test=ss.transform(X_test) #初始化线性假设的支持向量机分类器LinearSVC lsvc=LinearSVC() #进行模型训练 lsvc.fit(X_train,y_train) #利用训练好的模型对测试样本的数字类别进行预测,预测结果储存在变量y_predict中 y_predict=lsvc.predict(X_test) ######性能评测:使用准确率、召回率、精确率和F1指标,对SVM分类模型从事手写体数字图像识别任务进行性能评估 #支持向量机(分类)模型对手写体数字图像识别能力的评估 #使用模型自带的评估函数进行准确性评测 print ‘The Accuracy of Linear SVC is‘,lsvc.score(X_test,y_test) #[out]:The Accuracy of Linear SVC is 0.953333333333 #使用sklearn.metrics里面的classification_report模块对预测结果做更详细的分析 from sklearn.metrics import classification_report print classification_report(y_test,y_predict,target_names=digits.target_names.astype(str)) #[out]: # precision recall f1-score support # 0 0.92 1.00 0.96 35 # 1 0.96 0.98 0.97 54 # 2 0.98 1.00 0.99 44 # 3 0.93 0.93 0.93 46 # 4 0.97 1.00 0.99 35 # 5 0.94 0.94 0.94 48 # 6 0.96 0.98 0.97 51 # 7 0.92 1.00 0.96 35 # 8 0.98 0.84 0.91 58 # 9 0.95 0.91 0.93 44 # avg / total 0.95 0.95 0.95 450
时间: 2024-10-14 12:01:19