又和同学肝了半个上午(主要是一二节有课),完成了天气图像识别的第二期练习
一开始几个题不难,挺简单的,到后面出现HOG特征拟合svm模型,HOG提取特征,又是现学内容
HOG特征的维数用cv2.HOGDescriptor()来做
最后用shape来反应维数
import cv2 import matplotlib.pyplot as plt img=cv2.imread('/home/kesci/input/weather_image1552/训练集/100.jpg',0) plt.imshow(img) hg=cv2.HOGDescriptor() winSreide=(64,64) padding=(16,16) hg.getDescriptorSize() hgg=hg.compute(img,winSreide,padding) hgg.shape
还有个题是的HOG特征拟合svm模型得到的模型的第一个系数是多少?
这个第一个系数属实把我俩看懵逼了,啥玩意??最后找了一阵子资料都没有找到关于第一个系数的相关知识,发现下面有个求得分的于是我们先转移目标
训练得分题一般都是满分是1分,题目要求保留小数点后一点,那答案蒙也能蒙出来,但是抱着学习的态度决定先算算
主要为这几部分:
svm = SVM(max_iter=200)
这个是最大迭代次数,可以理解成训练多少次
svm.fit(X_train, y_train)
这是训练部分
'train done!'
svm.score(X_test, y_test)
这是用模型来检验成绩
官方资料显示:基于SVM的图像分类需要依靠HOG提取的特征,拟合模型时将HOG提取出的特征向量作为X,将样本的类别标签作为y
而上一题我们已经求出特征向量,而题目的样本类别标签也已经给出,我们要做的就是将两者一一对等连接起来,并进行训练
而在本题中X_train=X_test,Y也是一样,大致思路这样
但是过程中出现很多小问题,比如格式不对等,以及题目要求kernel的类型和svm的随机态设置为2020,这些在SVC的函数中直接修改即可
clf = SVC(kernel='linear',random_state=2020)
import cv2 import matplotlib.pyplot as plt import numpy as np import json with open('/home/kesci/input/weather_image1552/train.json','r') as f: js_data=json.load(f) cnt=0 mp={'sunny':0,'cloudy':1} js_pic=[] js_lab=[] for key in js_data: if(cnt<10): js_pic.append(key) js_lab.append(mp[js_data[key]]) cnt+=1 # for i in range(len(v_pic)): # print(v_pic[i],v_lab[i]) prePath='/home/kesci/input/weather_image1552/训练集/' features=[] for i in range(len(js_pic)): img=cv2.imread(prePath+js_pic[i],0) # plt.imshow(img) dsize=(100,128) img_rs=cv2.resize(img,dsize) hg=cv2.HOGDescriptor() # winFt=hg.getDescriptorSize() hog=hg.compute(img_rs).reshape(-1) print(hog) features.append(hog) # for i in range(10): from sklearn.svm import SVC clf = SVC(kernel='linear',random_state=2020) feature=np.array(features) label=np.array(js_lab) # feature = np.concatenate(feature, axis=0) # label = np.concatenate(label, axis=0) clf.fit(feature, label) clf.score(feature, label)
到此天气识别和疾病分析的前两个部分都已经完成,最后一部分就是真枪实弹,直接写完整程序来判断天气或疾病情况,等明天继续开干,奥利给