Python目前是機器學習領域增加最快速的編程語言之一。python
該教程共分爲11小節。在這個教程裏,你將學會:git
如何處理數據集,並構建精確的預測模型github
使用Python完成真實的機器學習項目算法
這是一個很是簡潔且實用的教程,但願你能收藏,以備後面複習!編程
接下來進入正題~數組
這個微課程適合誰學習?
熟悉python語法,會寫簡單腳本。這意味着你在此以前接觸過python,或者懂得其它編程語言,類C語言都是能夠的。微信
瞭解機器學習的基本概念。基本概念包括知道什麼是監督學習、非監督學習、分類和預測的區別、交叉驗證、簡單算法。不要被這些嚇到了,並不是要求你是個機器學習專家,只是你要知道如何查找並學習使用。數據結構
教程目錄
第1節:下載並安裝python及Scipy生態
# 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和pandas
使用python列表app
使用numpy array數組操做dom
使用matplotlib簡單繪圖
使用pandas兩種數據結構Series和DataFrame
# 導入各個庫
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數據
使用標準庫中CSV的CSV.reader()加載
使用第三方庫numpy中的numpy.loadtxt()加載
使用第三方庫pandas中的pandas.read_csv()加載
# 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節:對數據進行可視化分析
使用hist()方法建立每一個變量的直方圖
使用plot(kind='box')方法建立每一個變量的箱圖
使用plotting.scatter_matrix()方法建立矩陣散點圖
# 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估計器不兼容,它們假定數組中的全部值都是數值的,而且都具備並保持含義。使用不完整數據集的基本策略是放棄包含缺失值的整個行和/或列。然而,這是以丟失可能有價值的數據爲代價的(儘管不完整)。更好的策略是推算缺失值,即從數據的已知部分推斷它們。
fit(x,y):傳入數據以及標籤便可訓練模型,訓練的時間和參數設置,數據集大小以及數據自己的特色有關
score(x,y)用於對模型的正確率進行評分(範圍0-1)。但因爲對在不一樣的問題下,評判模型優劣的的標準不限於簡單的正確率,可能還包括召回率或者是查準率等其餘的指標,特別是對於類別失衡的樣本,準確率並不能很好的評估模型的優劣,所以在對模型進行評估時,不要輕易的被score的得分矇蔽。
predict(x)用於對數據的預測,它接受輸入,並輸出預測標籤,輸出的格式爲numpy數組。咱們一般使用這個方法返回測試的結果,再將這個結果用於評估模型。
fit(x,y):該方法接受輸入和標籤,計算出數據變換的方式。
transform(x):根據已經計算出的變換方式,返回對輸入數據x變換後的結果(不改變x)
fit_transform(x,y) :該方法在計算出數據變換方式以後對輸入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折交叉驗證估算算法的準確性
使用cross_val_score()函數評估交叉驗證結果,輸出k折交叉驗證準確度評分
# 使用交叉驗證評估模型
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大數據分析(pydatas)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。