Python機器學習·微教程

2021-03-02 Python大數據分析

Python目前是機器學習領域增長最快速的程式語言之一。

該教程共分為11小節。在這個教程裡,你將學會:

如何處理數據集,並構建精確的預測模型

使用Python完成真實的機器學習項目

這是一個非常簡潔且實用的教程,希望你能收藏,以備後面複習!

接下來進入正題~

這個微課程適合誰學習?如果你不符合以下幾點,也沒關係,只要花點額外時間搞清楚知識盲點就能跟上。所以這個教程既不是python入門,也不是機器學習入門。而是引導你從一個機器學習初級開發者,到能夠基於python生態開展機器學習項目的專業開發者。教程目錄第2節:熟悉使用python、numpy、matplotlib和pandas希望大家在學習的過程中能夠自主尋找解決困難的辦法,網上資源很豐富,這也是自我提升很關鍵的一步。當然也可以在評論區留言哦!第1節:下載並安裝python及Scipy生態這一節內容比較簡單,你需要下載python3.6並安裝在你的系統裡,我用的win10系統。接著要安裝Scipy生態和scikit-learn庫,這裡推薦使用pip安裝。簡單介紹一下Scipy,Scipy是一個基於python的數學、科學和工程軟體開源生態系統。包含一些核心庫:numpy、scipy、pandas、matplotlib、ipython、sympy如果你不想這麼麻煩,那麼也可以使用傻瓜式一條龍安裝-Anaconda,這裡面預裝了python及一百多個庫。安裝好後,就可以在命令行鍵入「python」,就可以運行python了。

# Python version
import sys
print('Python: {}'.format(sys.version))
# scipy
import scipy
print('scipy: {}'.format(scipy.__version__))
# numpy
import numpy
print('numpy: {}'.format(numpy.__version__))
# matplotlib
import matplotlib
print('matplotlib: {}'.format(matplotlib.__version__))
# pandas
import pandas
print('pandas: {}'.format(pandas.__version__))
# scikit-learn
import sklearn
print('sklearn: {}'.format(sklearn.__version__))

第2節:熟悉使用python、numpy、matplotlib和pandaspython是一門區分大小寫、使用#注釋、用tab縮進表示代碼塊的語言。這一小節目的在於練習python語法,以及在python環境下如何使用重要的Scipy生態工具。

# 導入各個庫
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

myarray = np.array([[1, 2, 3], [4, 5, 6]]) # 使用numpy數組
rownames = ['a', 'b']
colnames = ['one', 'two', 'three'] # 使用列表操作
mydataframe = pd.DataFrame(myarray, index=rownames, columns=colnames) #生成DataFrame
print(mydataframe)

mp = plt.plot(myarray) # 使用matplotlib繪製簡單圖表
plt.show() # 顯示圖像

第3節:加載CSV數據機器學習算法需要有數據,這節講解如何在python中正確地加載CSV數據集這裡使用pandas來加載數據集,數據集使用網上數據Pima Indians onset of diabetes,你也可以使用本地數據練習

# Load CSV using Pandas from URL
import pandas # 導入pandas庫
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pandas.read_csv(url, names=names) # 讀取數據
print(data.head(5)) # 列印數據集前5行

第4節:對數據進行描述性統計分析對數據理解的越透徹,建立的模型也會越精確。這裡就要提到描述性統計分析,主要包括數據的頻數分析、集中趨勢分析、離散程度分析、分布以及一些基本的統計圖形。

使用head()和tail()函數查看數據樣本

使用shape屬性查看數據規格

使用dtypes屬性查看每個變量的數據類型

使用describe()函數查看數據描述

使用corr()函數計算各個變量之間的相關性

# Load CSV using Pandas from URL
import pandas # 導入pandas庫
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pandas.read_csv(url, names=names) # 讀取數據

head_5 = data.head(5) # 查看前5行
print(head_5)
tail_5 = data.tail(5) # 查看後5行
print(tail_5)
shape_ = data.shape # 查看數據規格,即多少行多少列
print(shape)
dtypes_ = data.dtypes # 查看每個變量的數據類型
print(dtypes_)
corr_ = data.corr() # 查看各個變量之間的相關性
print(corr_)
description = data.describe() # 查看數據描述
print(description)

第5節:對數據進行可視化分析僅僅是做描述性統計無法直觀地理解數據,python提供了豐富的可視化工具,幫助展示數據。這一小節就是對上節數據集進行可視化描述,讓你一目了然。

# Load CSV using Pandas from URL
import pandas # 導入pandas庫
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pandas.read_csv(url, names=names) # 讀取數據

import matplotlib.pyplot as plt # 導入繪圖模塊
data.hist() # 直方圖
data.plot(kind='box') # 箱圖
pd.plotting.scatter_matrix(data) # 矩陣散點圖
plt.show() # 展示圖表

第6節:數據預處理在將數據用作機器學習模型之前,需要對數據的內容和結構做適當的調整,才能更好的適應模型。這就是數據預處理工作。

數據標準化。數據標準化是將數據按比例縮放,使之落入一個小的特定區間。有利於提升模型的收斂速度和模型精度。比較典型的標準化方法有min-max標準化、z-score 標準化、歸一化等

數據二值化。特徵二值化是對數值特徵進行閾值處理以獲得布爾值的過程,根據閾值將數據二值化(將特徵值設置為0或1)大於閾值的值映射到1,而小於或等於閾值的值映射到0.默認閾值為0時,只有正值映射到1。方法有Binarizing等。

分類數據連續化。通常,特徵不是作為連續值給出的,而是文本字符串或者數字編碼的類別。比如性別數據通常是["男", "女"]這樣的數據, 可以編碼成[1,2], 但是這種數據通常不是可以直接進入機器學習模型的。將這種分類數據進行連續化的方法最著名的就是one-hot-encoding

估算缺失的值。由於各種原因,許多真實世界的數據集包含缺失值,通常編碼為空白,NaN或其他佔位符。然而,這樣的數據集與scikit-learn估計器不兼容,它們假定數組中的所有值都是數值的,並且都具有並保持含義。使用不完整數據集的基本策略是放棄包含缺失值的整個行和/或列。然而,這是以丟失可能有價值的數據為代價的(儘管不完整)。更好的策略是推算缺失值,即從數據的已知部分推斷它們。

上面提到的數據預處理技術都可以通過scikit-learn提供的方法實現。簡單介紹下scikit-learn,scikit-learn擁有可以用於監督和無監督學習的方法,一般來說監督學習使用的更多。sklearn中的大部分函數可以歸為估計器(Estimator)和轉化器(Transformer)兩類。估計器(Estimator)其實就是模型,它用於對數據的預測或回歸。基本上估計器都會有以下幾個方法:

fit(x,y):傳入數據以及標籤即可訓練模型,訓練的時間和參數設置,數據集大小以及數據本身的特點有關

score(x,y)用於對模型的正確率進行評分(範圍0-1)。但由於對在不同的問題下,評判模型優劣的的標準不限於簡單的正確率,可能還包括召回率或者是查準率等其他的指標,特別是對於類別失衡的樣本,準確率並不能很好的評估模型的優劣,因此在對模型進行評估時,不要輕易的被score的得分蒙蔽。

predict(x)用於對數據的預測,它接受輸入,並輸出預測標籤,輸出的格式為numpy數組。我們通常使用這個方法返回測試的結果,再將這個結果用於評估模型。

轉化器(Transformer)用於對數據的處理,例如標準化、降維以及特徵選擇等等。同與估計器的使用方法類似:

fit(x,y):該方法接受輸入和標籤,計算出數據變換的方式。

transform(x):根據已經計算出的變換方式,返回對輸入數據x變換後的結果(不改變x)

fit_transform(x,y) :該方法在計算出數據變換方式之後對輸入x就地轉換。

列如,我要對數據集進行標準化處理,用到scikit-learn庫中的StandardScaler()函數,那麼先要用該函數的fit()方法,計算出數據轉換的方式,再用transform()方法根據已經計算出的變換方式,返回對輸入數據x標準化變換後的結果。

# 標準化數據 (0 mean, 1 stdev)
from sklearn.preprocessing import StandardScaler # 導入標準化函數
import pandas
import numpy
# 讀取數據
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pandas.read_csv(url, names=names)
array = dataframe.values
# 將數據分割為輸入和響應兩部分,即X和Y
X = array[:,0:8]
Y = array[:,8]
# 對數據進行標準化處理
scaler = StandardScaler().fit(X)
rescaledX = scaler.transform(X)
# summarize transformed data
numpy.set_printoptions(precision=3)
print(rescaledX[0:5,:])

第7節:通過重採樣方法進行算法評估用於訓練模型的數據集稱為訓練集,但如何評估訓練出來的模型的準確度呢?顯然不能再用訓練集,否則既是裁判又是運動員。所以,需要一個新的數據集用於驗證模型的準確度,新數據的獲取就需要用到重採樣方法了。重採樣可以將數據集切分為訓練集和驗證集兩個數據,前者用於訓練模型,後者用於評估模型。驗證數據取自訓練數據,但不參與訓練,這樣可以相對客觀的評估模型對於訓練集之外數據的匹配程度。模型在驗證數據中的評估常用的是交叉驗證,又稱循環驗證。它將原始數據分成K組(K-Fold),將每個子集數據分別做一次驗證集,其餘的K-1組子集數據作為訓練集,這樣會得到K個模型。這K個模型分別在驗證集中評估結果,最後的誤差MSE(Mean Squared Error)加和平均就得到交叉驗證誤差。交叉驗證有效利用了有限的數據,並且評估結果能夠儘可能接近模型在測試集上的表現,可以做為模型優化的指標使用。最後要通過某種評估規則計算出模型準確度的分數,這裡提供了cross_val_score(scoring='')函數評估交叉驗證結果,其中參數scoring代表評估規則。評估規則有很多種,針對回歸和分類,有不同的選擇,比如:

# 使用交叉驗證評估模型
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
# 加載數據
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
# 使用k折交叉驗證,n-split就是K值,shuffle指是否對數據洗牌,random_state為隨機種子
kfold = KFold(n_splits=10,shuffle = True, random_state=7)
# 使用邏輯回歸模型,這是一個分類算法
model = LogisticRegression(solver='liblinear')
# 交叉驗證,cv代表交叉驗證生成器,這裡是k折,scoring代表評估規則,輸出模型對於10個驗證數據集準確度的評估結果
results = cross_val_score(model, X, Y, cv=kfold,scoring='neg_mean_squared_error')
# 列印這10個結果的平均值和標準差
print("Accuracy: %.3f%% (%.3f%%)") % (results.mean()*100.0, results.std()*100.0)

未完待續!

相關焦點

  • Python機器學習課程(代碼與教程)
    >https://github.com/machinelearningmindset/machine-learning-course目錄簡介這個項目的目的是提供一個全面但簡單的用python完成機器學習的教程。
  • 2018AI學習清單丨150個最好的機器學習和Python教程
    機器學習的發展可以追溯到1959年,有著豐富的歷史。這個領域也正在以前所未有的速度進化。在今年秋季,開始準備博士項目的時候,精選了一些有關機器學習和NLP的優質網絡資源。為了幫助也在經歷類似探索過程的童鞋,Robbie Allen把至今發現的最好的教程匯總了一個列表。公眾號後臺回覆:「清單」,獲取本文學習清單地址。
  • Python網絡爬蟲教程+數據分析+機器學習
    程式設計師小樂 舉報   前段時間,小夥伴多次在後臺留言詢問Python爬蟲教程
  • 請收下這份2018學習清單:150個最好的機器學習,NLP和Python教程
    在秋季開始準備博士項目的時候,我已經精選了一些有關機器學習和NLP的優質網絡資源。一般我會找一個有意思的教程或者視頻,再由此找到三四個,甚至更多的教程或者視頻。猛回頭,發現標收藏夾又多了20個資源待我學習(推薦提升效率工具Tab Bundler)。
  • 乾貨 | 請收下這份2018學習清單:150個最好的機器學習,NLP和Python教程
    在今年秋季開始準備博士項目的時候,我已經精選了一些有關機器學習和NLP的優質網絡資源。一般我會找一個有意思的教程或者視頻,再由此找到三四個,甚至更多的教程或者視頻。猛回頭,發現標收藏夾又多了20個資源待我學習(推薦提升效率工具Tab Bundler)。
  • 200種機器學習教程匯總!
    我將這篇文章分為四個部分:機器學習,NLP,Python和數學。我在每個部分都包含了一些主題,但由於機器學習是一個非常複雜的學科,我不可能包含所有可能的主題。如果有很好的教程你知道我錯過了,請告訴我!我將繼續完善這個學習教程。
  • 學python?不是一個python入門教程就行,學之前你必須知道這些
    機器學習:這也是python最有魅力的地方,善於做圖形分析,算法建模等等。所以python在人工智慧,機器學習的領域有著讀到的優勢。看重前景方向:那麼學python大數據分析或是python機器學習。其中大數據分析相對容易,python提供的是語言的環境,數據分析會有許多對應的工具包,會包含各種分析模型,隨著經驗積累會很熟練照到對應項目的分析模型。
  • python教程
    python視頻教程     文章底部留言 序號 給您發送視頻教程連結或者加微信 bigzql 索要Python
  • Python機器學習教程
    本機器學習教程提供了機器學習的基本和中間概念。它是為完全入門的學生和專業工作人員而設計的。在本教程的最後,您不會成為機器學習方面的專家,但是您將能夠製作能夠執行複雜任務(例如,預測房屋價格或從尺寸識別虹膜的種類)的機器學習模型。花瓣和萼片的長度。如果您還不是一個完整的初學者,並且對機器學習有所了解,那麼我建議您從子主題八開始,即機器學習類型。在進入本教程之前,您應該熟悉Pandas和NumPy。這對於理解實現部分很重要。
  • 《Python 機器學習》-Python Machine Learning(附電子版 pdf)
    全書共16章,除了簡要介紹機器學習及Python在機器學習中的應用,還系統講述了數據分類、數據預處理、模型優化、集成學習、回歸、聚類、神經網絡、深度學習等內容。本書將機器學習背後的基本理論與應用實踐聯繫起來,通過這種方式讓讀者聚焦於如何正確地提出問題、解決問題。本書講解了如何使用Python的核心元素以及強大的機器學習庫,同時還展示了如何正確使用一系列統計模型。
  • 《Python 機器學習》-Python Machine Learning第一版+第二版(附電子版 pdf)
    》,機器學習與預測分析正在改變企業和其他組織的運作方式,本書將帶領讀者進入預測分析的世界。全書共16章,除了簡要介紹機器學習及Python在機器學習中的應用,還系統講述了數據分類、數據預處理、模型優化、集成學習、回歸、聚類、神經網絡、深度學習等內容。本書將機器學習背後的基本理論與應用實踐聯繫起來,通過這種方式讓讀者聚焦於如何正確地提出問題、解決問題。本書講解了如何使用Python的核心元素以及強大的機器學習庫,同時還展示了如何正確使用一系列統計模型。
  • 乾貨| 請收下這份2018學習清單:150個最好的機器學習,NLP和Python...
    在今年秋季開始準備博士項目的時候,我已經精選了一些有關機器學習和NLP的優質網絡資源。一般我會找一個有意思的教程或者視頻,再由此找到三四個,甚至更多的教程或者視頻。猛回頭,發現標收藏夾又多了20個資源待我學習(推薦提升效率工具Tab Bundler)。
  • 利用 Python,四步掌握機器學習
    因為 Python 擁有更廣闊的分布(使用 Jango 託管網站,自然語言處理 NLP,訪問 Twitter、Linkedin 等網站的 API),同時類似於更多的傳統語言,比如 C python 就比較流行。
  • 小叮噹機器學習:Python3.6配置TensorFlow的GPU版詳細安裝教程
    隨著機器學習,神經網絡的搭建,我們對海量數據的處理需求越來越大。雖然,CPU的發展速度已經放緩,但並行處理的架構卻取得了爆炸式的發展。圖形處理單元(GPU)的大量運用,已經拉開了機器學習迅猛發展的序幕。
  • 【微筆記】houdini使用python創建城市教程筆記I
    點擊上方藍色字CG獵人關注最有前景技術與教程——  微資訊 · 微課程
  • Python & 機器學習項目集錦 | GitHub Top 45
    Python中的列表⑥ Python列表生成器的教程在這份教程中,你將能夠學習到如何在Python中有效地使用列表生成器來創建列表通過這個教程,你可以了解如何使用Python讀取和導入Excel文件,如何將數據寫入這些電子表格。
  • 開源《Python 機器學習》-Python Machine Learning第一版+第二版(附電子版 pdf)
    全書共16章,除了簡要介紹機器學習及Python在機器學習中的應用,還系統講述了數據分類、數據預處理、模型優化、集成學習、回歸、聚類、神經網絡、深度學習等內容。本書將機器學習背後的基本理論與應用實踐聯繫起來,通過這種方式讓讀者聚焦於如何正確地提出問題、解決問題。本書講解了如何使用Python的核心元素以及強大的機器學習庫,同時還展示了如何正確使用一系列統計模型。
  • 200多個最好的機器學習、NLP和Python教程
    這篇文章包含了我目前為止找到的最好的教程內容。這不是一張羅列了所有網上跟機器學習相關教程的清單——不然就太冗長太重複了。
  • 《Python 機器學習》第一版+第二版(附電子版 pdf)
    》,機器學習與預測分析正在改變企業和其他組織的運作方式,本書將帶領讀者進入預測分析的世界。全書共16章,除了簡要介紹機器學習及Python在機器學習中的應用,還系統講述了數據分類、數據預處理、模型優化、集成學習、回歸、聚類、神經網絡、深度學習等內容。本書將機器學習背後的基本理論與應用實踐聯繫起來,通過這種方式讓讀者聚焦於如何正確地提出問題、解決問題。本書講解了如何使用Python的核心元素以及強大的機器學習庫,同時還展示了如何正確使用一系列統計模型。
  • 跟著吳恩達老師學習機器學習,Python筆記分享!
    譯者:AI研習社(成語風)雙語原文連結:A Full-Length Machine Learning Course in Python for Free吳恩達在史丹福大學講授的機器學習課程堪稱Coursera上最具人氣的課程。我之前試聽了好幾門別的機器學習課程但我覺得他的在拆解概念使之變得易於理解方面做得最好。