第1关:手写体图像数据集初识
# -*- coding: utf-8 -*-
#读取机器学习包sklearn内置的手写体图像数据集,输出数据集的基本信息:
#图像像素数据集的大小x_size(元组),第1个元素为行数,第2个元素为列数,
#图像标签向量y
#返回 (x_size,y)
def return_values():
import sklearn.datasets
a=sklearn.datasets.load_digits()
X=a.data #图像像素数据集
Y=a.target #图像标签向量
x_size = X.shape
y = Y
return (x_size,y)
#********** End **********#
第2关:基于全像素特征的手写体图像识别模型
def return_values():
import sklearn.datasets
a=sklearn.datasets.load_digits()
#2 提取数据
X=a.data
Y=a.target
#3 划分测试集和训练集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(X,Y,test_size=0.2,random_state=4)
#4构建支持向量机模型
import sklearn.svm as svm
from sklearn.svm import SVC
clf = svm.SVC(kernel='linear')
clf.fit(x_train,y_train)
rv=clf.score(x_train, y_train);
y1=clf.predict(x_test)
r=y1-y_test
v=len(r[r==0])/len(y1)
return (rv,v)
#********** End **********#
第3关:基于全像素特征的人脸识别模型
# -*- coding: utf-8 -*-
#读取机器学习包sklearn内置的人脸图像数据集,
#按80%训练和20%测试进行随机划分,构建支持向量机分类模型(线性核函数),
#返回模型的准确率rv和测试集的预测准确率rs。
def return_values():
#1 读取数据集
import sklearn.datasets
a=sklearn.datasets.fetch_olivetti_faces()
#2 提取数据
X=a.data
Y=a.target
from sklearn.decomposition import PCA
pca=PCA(n_components=0.95)
pca.fit(X)
X1=pca.transform(X)
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(X1,Y,test_size=0.2,random_state=4)
import sklearn.svm as svm
from sklearn.svm import SVC
clf = svm.SVC(kernel='linear')
clf.fit(x_train,y_train)
rv=clf.score(x_train, y_train);
y1=clf.predict(x_test)
r=y1-y_test
rs=len(r[r==0])/len(y1)
return (rv,rs)
#********** End **********#
第4关:基于像素主成分的人脸识别模型
# -*- coding: utf-8 -*-
#读取机器学习包sklearn内置的人脸图像数据集,
#对像素特征数据做主成分分析,并提取主成分,要求累计贡献率在95%以上。
#基于提取的主成分数据作为输入特征数据,
#按80%训练和20%测试进行随机划分,构建支持向量机分类模型(线性核函数),
#返回模型的准确率rv和测试集的预测准确率rs。
from sklearn.decomposition import PCA #主成分分析模块
def return_values():
#1 读取数据集
import sklearn.datasets
a=sklearn.datasets.fetch_olivetti_faces()
#2 提取数据
X=a.data
Y=a.target
from sklearn.decomposition import PCA
pca=PCA(n_components=0.95)
pca.fit(X)
X1=pca.transform(X)
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(X1,Y,test_size=0.2,random_state=4)
import sklearn.svm as svm
from sklearn.svm import SVC
clf = svm.SVC(kernel='linear')
clf.fit(x_train,y_train)
rv=clf.score(x_train, y_train);
y1=clf.predict(x_test)
r=y1-y_test
rs=len(r[r==0])/len(y1)
return (rv,rs)
#********** End **********#
第5关:彩色图像识别模型
from PIL import Image
import numpy as np
import os
def return_values():
path='图片2/' # 纸币图像文件夹
fname=os.listdir(path)
X=np.zeros((len(fname),9)) # 预定义自变量:9个颜色矩特征
Y=np.zeros(len(fname)) # 预定义因变量:面额值
for i in range(len(fname)):
img=Image.open(path+fname[i]) # 读取第i张图片
im=img.split()
# 提取RGB通道并归一化,截取中心100x100区域
R=np.array(im[0])/255
row_1=int(R.shape[0]/2)-50
row_2=int(R.shape[0]/2)+50
con_1=int(R.shape[1]/2)-50
con_2=int(R.shape[1]/2)+50
R=R[row_1:row_2,con_1:con_2]
G=np.array(im[1])/255
G=G[row_1:row_2,con_1:con_2]
B=np.array(im[2])/255
B=B[row_1:row_2,con_1:con_2]
# 构造X:计算三个通道的一阶、二阶、三阶颜色矩
# R通道
r1 = np.mean(R)
r2 = np.std(R)
a_r = np.mean(np.abs(R - r1)**3)
r3 = a_r**(1./3)
# G通道
g1 = np.mean(G)
g2 = np.std(G)
a_g = np.mean(np.abs(G - g1)**3)
g3 = a_g**(1./3)
# B通道
b1 = np.mean(B)
b2 = np.std(B)
a_b = np.mean(np.abs(B - b1)**3)
b3 = a_b**(1./3)
X[i, :] = [r1, r2, r3, g1, g2, g3, b1, b2, b3]
# 构造Y:从文件名提取面额值
png_name = fname[i]
Y[i] = float(png_name.split("_")[0])
# 划分训练集和测试集,构建支持向量机模型
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=4)
clf = SVC(class_weight='balanced', random_state=0) # 使用平衡类别权重
clf.fit(x_train, y_train)
# 计算准确率
rv = clf.score(x_train, y_train) # 训练集准确率
rs = clf.score(x_test, y_test) # 测试集准确率
return (rv, rs)
第6关:彩色图像识别模型(拓展)
'''
任务:
现有1元、5元、10元、20元、50元、100元共6种面额的纸币彩色图像,储存在"图片"文件夹内,相关信息及要求如下:
1)每种纸币均从正、反两面及两个不同的方向,进行采集图像各10张,即每种纸币采集40张,6种货币,则总图片有240张。
2)图片的命名为:面额值_采集序号.png,比如1元纸币40张依次命名为:1_1.png~1_40.png,其他同理。
3)读取图片文件夹,计算每张图片的R、G、B三个颜色通道的一阶、二阶、三阶颜色矩特征,共9个特征指标数据,记为自变量X,
4)同时构造纸币面额标签数据集,记为因变量Y。
5)按80%训练和20%测试进行随机划分数据集,构建支持向量机分类模型,
6)返回模型的准确率rv和测试集的预测准确率rs。
'''
from PIL import Image
import numpy as np
import os
def return_values():
import os
path='图片/'
fname=os.listdir(path)
X=np.zeros((len(fname),9)) #预定义自变量,即9个颜色矩阵特征指标
Y=np.zeros(len(fname)) #预定义因变量
for i in range(len(fname)):
img=Image.open(path+fname[i]) #读取第i张图片
im=img.split()
R=np.array(im[0])/255 #R通道
row_1=int(R.shape[0]/2)-50
row_2=int(R.shape[0]/2)+50
con_1=int(R.shape[1]/2)-50
con_2=int(R.shape[1]/2)+50
R=R[row_1:row_2,con_1:con_2]
G=np.array(im[1])/255 #G通道
G=G[row_1:row_2,con_1:con_2]
B=np.array(im[2])/255 #B通道
B=B[row_1:row_2,con_1:con_2]
#构造X
png_name=fname[i]
X[i]=png_name.split("_")[0]
#构造Y
png_name=fname[i]
Y[i]=png_name.split("_")[0]
#建模及计算
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(X,Y,test_size=0.2,random_state=4)
import sklearn.svm as svm
from sklearn.svm import SVC
clf = svm.SVC(kernel='linear')
clf.fit(x_train,y_train)
rv=clf.score(x_train, y_train);
y1=clf.predict(x_test)
r=y1-y_test
rs=len(r[r==0])/len(y1)
return (rv,rs)