タスク4 --KNN決定境界+ +は、標準化され、クロスバリデーションています
.KNN決定境界とKの影響
この部分は主に右のKを選択する方法を中心に
線形および非線形の意思決定:まず、決定境界が分かれています。Kの増加に伴い、決定境界は、よりスムーズで安定したモデルとなります。
II。クロスバリデーション
「パラメータの調整」
一般的に使用される交差検定法K倍クロスバリデーションです。我々は最初のトレーニングとテストセットにデータを訓練して、モデルを訓練した後、テストセットのモデルの精度を評価するためにトレーニングセットを使用します。
III。特性の標準化
KNNアルゴリズムは、距離に非常に依存している。このアルゴリズムは距離に依存するので、標準化は非常に重要な機能である、紙内部の先生に加えて、この学期のクラスは、いくつかの木のカエルを学んだ、この他については、次のといくつかのバー。
分数スケーリング正規化:(JはであるMAX(| V「|)<1が最小の整数です)
Zスコア正規化(例、平均、標準偏差が分母です)
タスク5 - 画像認識学習
I.読むと、画像の表現
画像は、Pythonの独自のライブラリで読み取ることができます。
例の画像:
輸入PLTのようmatplotlib.pyplot IMG = plt.imread(' D:\ Lena.jpg ' ) プリント(img.shape) plt.imshow(IMG)
結果を読みます
(512L、512L、3L)
II。特徴画像
この方法は、ここで述べた構成になされている画像の特徴、画像はKNNが遮断され、回転、明るさ等とは考えられないであろう。
色の特徴:
(1)SIFT特徴は、回転角度が変化すると、画像の明るさ、または撮影角度は、検出が良好な結果を得ることが可能であっても、スケーリングに対して不変であり、非常に安定した局所的な特徴である局所特徴です。
(2)HOGは、画像のその光学的および幾何学的変形が良い不変性を保つことができるように、画像演算部に部分的グリッドです。
III。画像特徴次元削減
この部分は、私は主に少し知ってもらうPCA主成分分析です。(私はこれについての情報を見つけるために、ジョブの数が多いほど見つかっているように見える非常に精通PCA、のように感じ、と述べたが、我々は大きな仕事がそれのこの部分SVD特異値によって、次元削減、ある打破しなければならなかったし、それは非常に無知であり...私は確率論の数学の知識をリフレッシュしたい、いくつかの式は---忘れます)
主成分分析では、オンライン情報に説明するために、この箇所で見つかりました:
はっきり彼はある低次元にマッピングされた高次元のベクトル中。Sklearnは一瞬呼び出そう:
import numpy as np import matplotlib.pyplot as plt x=np.empty((100,2)) x[:,0]=np.random.uniform(0.0,100.0,size=100) x[:,1]=0.75*x[:,0]+3.0*np.random.normal(0,3,size=100) plt.figure() plt.scatter(x[:,0],x[:,1]) plt.show() from sklearn.decomposition import PCA #在sklearn中调用PCA机器学习算法 pca=PCA(n_components=1) #定义所需要分析主成分的个数n pca.fit(x) #对基础数据集进行相关的计算,求取相应的主成分 print(pca.components_) #输出相应的n个主成分的单位向量方向 x_reduction=pca.transform(x) #进行数据的降维 x_restore=pca.inverse_transform(x_reduction) #对降维数据进行相关的恢复工作 plt.figure() plt.scatter(x[:,0],x[:,1],color="g") plt.scatter(x_restore[:,0],x_restore[:,1],color="r") plt.show()
任务六——利用KNN 进行图像识别
一.文件的读取、可视化、采样
图片展示:
classes = ['plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck'] num_classes = len(classes) # 样本种类的个数 samples_per_class = 5 # 每一个类随机选择5个样本 # TODO 图片展示部分的代码需要在这里完成。 hint: plt.subplot函数以及 plt.imshow函数用来展示图片 plt.figure(figsize=(10,10)) #图片的尺寸 import random for i in range(num_classes): indexs = np.where(y_train==i)[0] random.shuffle(indexs) for j in range(samples_per_class): ax = plt.subplot(7,10,10*j+i+1) if j==0: ax.set_title(classes[i]) plt.axis('off') plt.imshow(X_train[indexs[j]]/255)
(图片尺寸5×5我有点看不清就改成了10×10)
先获取每一类图片在训练集里面的下标值,打乱下标,随机获取前j个。ax = plt.subplot(7,10,10*j+i+1)的间距确实比ax = plt.subplot(5,10,10*j+i+1)看起来舒服。
--------我是分割线---------
--------我是分割线---------
下一步,emm如果不跟着老师的例子走的话我肯定想不起来统计每一个类别图片出现的次数,分析样本是否平衡还是不平衡。
# 统计并展示每一个类别出现的次数 for i in range(num_classes): print("%s:%d"%(classes[i],len(np.where(y_train==i)[0])))
得到结果:
plane:5000 car:5000 bird:5000 cat:5000 deer:5000 dog:5000 frog:5000 horse:5000 ship:5000 truck:5000
随机采样这里要注意random函数不要用python的numpy矩阵,要用shuffle numpy的矩阵和numpy.random!
numpy.random,shuffle(x)是进行原地洗牌,直接改变x的值,而无返回值。对于多维度的array来说,只对第一维进行洗牌,比如一个 3×3 的array,只对行之间进行洗牌,而行内内容保持不变。
我在跑的时候试了一下直接用了Python的numpy和random,果然是出问题了。
二.使用KNN算法识别图片
我用的是:
params_k = [1,3,5] # 可以选择的K值 params_p = [1,2] # 可以选择的P值
不过还是没跑出来。。。
然后去了解了一下GridSearchCV,是一种调参手段,防止参数选择不当出现过度拟合或者欠拟合的情况。经GridSearchCV计算返回的对象既可以fit(),也可以返回最佳参数。
三.抽取图片特征,用KNN识别图片
这个准确率也没跑出来。。。
最后
关于numpy的使用,还是不太熟练吧,用的时候还是要查文档查资料多一下。