又和同学肝了半个上午(主要是一二节有课),完成了天气图像识别的第二期练习
一开始几个题不难,挺简单的,到后面出现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)

到此天气识别和疾病分析的前两个部分都已经完成,最后一部分就是真枪实弹,直接写完整程序来判断天气或疾病情况,等明天继续开干,奥利给