機器學習實戰筆記1——機器學習導論

      因爲輔修專業,這學期在學習機器學習這門課。
      使用的語言爲Python,因爲Python涉及到庫的安裝、pip升級等,經常因爲源、版本不對等問題導致報錯,以前沒有做筆記的習慣,遇到問題就上網搜,雖然能解決,但花費不少時間,故首次嘗試寫下學習筆記,記錄學習過程的一些知識及中完成作業的過程中遇到的麻煩,方便個人以後及時找到解決方法,如恰好能幫到你,實屬我之榮幸,如有錯誤,歡迎斧正。

任務安排

1、機器學習導論        8、核方法
2、KNN及其實現        9、稀疏表示
3、K-means聚類       10、高斯混合模型
4、主成分分析           11、嵌入學習
5、線性判別分析       12、強化學習
6、貝葉斯方法           13、PageRank
7、邏輯迴歸               14、深度學習

機器學習導論

人工智能核心課程——機器學習
機器學習頂會——國際機器學習大會 ICML
因爲我們才第二屆,不夠成熟,沒有配套課本,老師的推薦書籍是《模式識別》——張學工

      1956年,達特茅斯會議的舉辦,標誌人工智能學科的誕生,而機器學習,則起源於人工智能,從第一階段推理期,研究者們意識到機器僅有邏輯推理能力是遠遠不夠的,到第二階段知識期,研究者們受困於總結出大量知識再教給系統,後到第三階段學習期,20世紀90年代中後期,人們淹沒在數據海洋中喘息不得,意識到發展自動數據分析技術——機器學習迫在眉睫,機器學習作爲“突破知識工程瓶頸”之利器應運而生。
      再到如今,機器學習已大量應用於我們生活的方方面面,遊戲製作、生物信息學、搜索引擎、入侵檢測、無人駕駛、火星機器人、決策助手…

Ⅰ機器學習定義

         對於某類任務 T 和性能度量 P,如果一個計算機程序在 T 上以 P 衡量的性能隨着經驗 E 而自我完善,那麼我們稱這個計算機程序在從經驗 E 中學習
在這裏插入圖片描述
簡單點說,就是給定一組輸入數據集,經過模型訓練後,得到相應輸出數據集

Ⅱ 機器學習分支

   監督學習 Supervised Learning
       分類 Classification (離散)——KNN、貝葉斯方法……
       迴歸 Regression (連續)
       降維 Dimensionality Reduction——LDA……
   無監督學習 Unsupervised Learning
       密度估計 Density Estimation
       聚類 Clustering——K-means……
       降維 Dimensionality Reduction——PCA……
       圖像分割 Image Segmentation
在這裏插入圖片描述
   弱監督學習 Weakly-supervised Learning
       半監督學習 Semi-supervised (介於監督學習與無監督學習之間使用大量的未標記數據,以及同時使用標記數據,來進行模式識別工作)

       偏監督學習 Partially-supervised
   增強學習 Reinforcement Learning
       Q-learning

Ⅲ 性能度量

      loss(Y,f(X))loss(Y, f(X)) —— 衡量真實標籤Y和預測標籤 f(X)f(X) 之間的距離(X是抽取的數據)
      不僅僅是考慮某一個測試數據的標籤,而是數據集中任意一個數據
      給定一個從所有細胞圖片中隨機抽取的細胞圖片,預測器的平均性能有多好?
RiskR(f)Exy[loss(Y,f(X))] Risk R(f)≡E_{xy}[loss(Y,f(X))]R(f)R(f)越小即預測性能越好)
      不同情況有不同具體公式,下圖僅舉例在這裏插入圖片描述

下面到了重中之重的環節!!!今日作業與過程問題解決!!!
(沒想到第一節導論課都能佈置作業,感覺纔剛認識“機器學習”這個詞)

今日任務

1、安裝軟件 Python 和工具包 sklearn
2、生成數據 make_circles 和 make_moons,並顯示 X=400×2X=400×2,Y={0,1}400^{400},畫圖:
在這裏插入圖片描述
3、思考:高維數據如何可視化?
4、上 機器學習數據庫下載並顯示至少一個圖像或文檔數據集。

任務解決

1、果不其然,①pip又更新了,使用以下代碼搞定(會自動安裝與已裝Python所相符的版本,有時一次沒法成功,多跑幾次就可以了,具體原因暫時不知道,可能是版本、路徑、網絡之類的問題,有知道的同學歡迎指教!)

python -m pip install --upgrade pip

②下面是配置 sklearn
      sklearnsklearnscikitlearnscikit-learn 的簡稱,是一個基於 PythonPython 的第三方模塊。sklearnsklearn 庫集成了一些常用的機器學習方法,在進行機器學習任務時,並不需要實現算法,只需要簡單的調用 sklearnsklearn 庫中提供的模塊就能完成大多數的機器學習任務(用 PythonPython 這種高級語言就是好啊,站在巨人的肩膀上)。
      由於它有好幾個依賴庫,一個一個提前安裝挺麻煩的,筆者從別的大佬那找到的一個比較方便的代碼(筆者是用 pycharmpycharm,有的同學說用 anacondaanaconda 直接有自帶 sklearnsklearn

pip install scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple

如果不加後面的清華源,用的外網,速度極其緩慢,載其他的包也是一樣的,只需把install和-i之間的包名更改即可
安裝好後提示:在這裏插入圖片描述
可以看到 sklearnsklearn 有三個依賴庫 numpynumpyjoblibjoblibscipyscipy
那麼,終於算是解決第一題了!
2、參考sklearn之樣本生成(有缺少 matplotlibmatplotlib 的用上面的命令行配置)
x[n:]x[n,:] or x[:n]x[:,n]numpynumpy 中數組的用法 代碼註釋裏稍微解釋了一下

from sklearn.datasets import make_circles
from sklearn.datasets import make_moons
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(1)
x1, y1 = make_circles(n_samples=400, factor=0.5, noise=0.1)
# n_samples:生成樣本數,內外平分   noise:異常點的比例   factor:內外圓之間的比例因子 ∈(0,1)
# 舉例x1 = np.array([[0,1],[2,3],[4,5],[6,7],[8,9],[10,11],[12,13],[14,15],[16,17],[18,19]])
# x1[:,0]表示取所有座標的第一維數據   x1[0,:]表示第一個座標的所有維數據

plt.subplot(121)     # 一行兩列 當前爲1(第一行第一列)
plt.title('make_circles function example')
plt.scatter(x1[:, 0], x1[:, 1], marker='o', c=y1)
# 第一個參數橫座標 第二個參數縱座標 marker爲標誌圖案 c爲顏色(可以是二維行數組)
# x1[:,0]即取x座標 x1[:,1]即取y座標

plt.subplot(122)
x1, y1 = make_moons(n_samples=400, noise=0.1)
plt.title('make_moons function example')
plt.scatter(x1[:, 0], x1[:, 1], marker='o', c=y1)
plt.show()

效果圖
在這裏插入圖片描述
3、高維數據如何可視化?當然是上面提到過的無監督學習裏的降維啦,比如人臉識別中用PCA算法降維提取特徵臉
4、參考Python把多張圖片拼成大圖
需要注意的是** PTL 模塊封裝在 pillow 裏**
這裏只需更改 IMAGES_PATH 和 IMAGE_SAVE_PATH 即可
注意
(1) IMAGES_PATH 要到照片集的那一目錄下(最後需斜槓
(2) IMAGE_SAVE_PATH 最後無斜槓
(3) Python 數據讀取路徑比較特殊,\有轉義的含義,故有三種表示路徑方法
①在路徑前面+r   ②用一個斜槓替代   ③用兩個反斜槓替代
參考自 unicode error

import PIL.Image as Image
import os

IMAGES_PATH = 'C:/Users/1233/Desktop/Horse100/Horse100/'  # 圖片集地址
# IMAGES_PATH = r'C:/Users/1233/Desktop/Horse100/Horse100/'
IMAGES_FORMAT = ['.jpg']  # 圖片格式
IMAGE_SIZE = 256  # 每張小圖片的大小
IMAGE_ROW = 10  # 圖片間隔,也就是合併成一張圖後,一共有幾行
IMAGE_COLUMN = 10  # 圖片間隔,也就是合併成一張圖後,一共有幾列
IMAGE_SAVE_PATH = 'C:\\Users\\1233\\Desktop\\Horse100\\Horse100\\final.jpg'  # 圖片轉換後的地址

# 獲取圖片集地址下的所有圖片名稱
image_names = [name for name in os.listdir(IMAGES_PATH) for item in IMAGES_FORMAT if
               os.path.splitext(name)[1] == item]


# 定義圖像拼接函數
def image_compose():
    to_image = Image.new('RGB', (IMAGE_COLUMN * IMAGE_SIZE, IMAGE_ROW * IMAGE_SIZE))  # 創建一個新圖
    # 循環遍歷,把每張圖片按順序粘貼到對應位置上
    for y in range(1, IMAGE_ROW + 1):
        for x in range(1, IMAGE_COLUMN + 1):
            from_image = Image.open(IMAGES_PATH + image_names[IMAGE_COLUMN * (y - 1) + x - 1]).resize(
                (IMAGE_SIZE, IMAGE_SIZE), Image.ANTIALIAS)
            to_image.paste(from_image, ((x - 1) * IMAGE_SIZE, (y - 1) * IMAGE_SIZE))
    return to_image.save(IMAGE_SAVE_PATH)  # 保存新圖


image_compose()  # 調用函數

效果圖在這裏插入圖片描述在這裏插入圖片描述

總結

對於本科的“機器學習”這類較難科目的初學習,我們應該學會站在巨人的肩膀上,先通過做出一些有趣的東西培養興趣,再興趣使然,不斷深入,以及,感謝前輩們的資源!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章