機器學習筆記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年代中後期,人們淹沒在數據海洋中喘息不得,意識到發展自動數據分析技術——機器學習迫在眉睫,機器學習作爲“突破知識工程瓶頸”之利器應運而生。
      再到如今,機器學習已大量應用於我們生活的方方面面,遊戲製作、生物信息學、搜索引擎、入侵檢測、無人駕駛、火星機器人、決策助手…

(1)機器學習定義

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

(2)機器學習分支

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

(3)性能度量

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

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

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

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()  # 調用函數

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

總結

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

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