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__))
# 導入各個庫
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() # 顯示圖像
# 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行
使用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)
# 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() # 展示圖表
數據標準化。數據標準化是將數據按比例縮放,使之落入一個小的特定區間。有利於提升模型的收斂速度和模型精度。比較典型的標準化方法有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,:])
# 使用交叉驗證評估模型
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)
未完待續!