Numpy 和 scikit-learn 都是python經常使用的第三方庫。numpy庫能夠用來存儲和處理大型矩陣,而且在必定程度上彌補了python在運算效率上的不足,正是由於numpy的存在使得python成爲數值計算領域的一大利器;sklearn是python著名的機器學習庫,它其中封裝了大量的機器學習算法,內置了大量的公開數據集,而且擁有完善的文檔,所以成爲目前最受歡迎的機器學習學習與實踐的工具。html
首先導入Numpy庫python
import numpy as np
a = [1,2,3,4,5,6] # python內置數組結構 b = np.array(a) # numpy數組結構
python有內置數組結構(list),咱們爲何還要使用numpy的數組結構呢?爲了回答這個問題,咱們先來看看python內置的數組結構有什麼樣的特色。咱們在使用list的時候會發現,list數組中保存的數據類型是不用相同的,能夠是字符串、能夠是整型數據、甚至能夠是個類實例。這種存儲方式很使用,爲咱們使用帶來了不少遍歷,可是它也承擔了消耗大量內存的缺陷或不足。爲何這麼說呢?實際上list數組中的每一個元素的存儲都須要1個指針和1個數據,也就是說list中保存的實際上是數據的存放地址(指針),它比原生態的數組多了一個存放指針的內存消耗。所以,當咱們想去減小內存消耗時,不妨將list替換成np.array,這樣會節省很多的空間,而且Numpy數組是執行更快數值計算的優秀容器。算法
np.array([1,2,3]) # 建立一維數組 np.asarray([1,2,3]) np.array([1,2,3], [4,5,6]) # 建立多維數組 np.zeros((3, 2)) # 3行2列 全0矩陣 np.ones((3, 2)) #全1矩陣 np.full((3, 2), 5) # 3行2列所有填充5
np.array 和 np.asarray 的區別:數組
def asarray(a, dtype=None, order=None): return array(a, dtype, copy=False, order=order)
可見,它們區別主要在於: array會複製出一個新的對象,佔用一份新的內存空間,而asarray不會執行這一操做。array相似深拷貝,asarray相似淺拷貝。網絡
基礎計算app
arr1 = np.array([[1,2,3], [4,5,6]]) arr2 = np.array([[6,5], [4,3], [2,1]]) # 查看arr維度 print(arr1.shape) # (2, 3) #切片 np.array([1,2,3,4,5,6])[:3] #array([1,2,3]) arr1[0:2,0:2] # 二維切片 #乘法 np.array([1,2,3]) * np.array([2,3,4]) # 對應元素相乘 array([2,6, 12]) arr1.dot(b) # 矩陣乘法 #矩陣求和 np.sum(arr1) # 全部元素之和 21 np.sum(arr1, axis=0) #列求和 array([5, 7, 9]) np.sum(arr1, axis=1) # 行求和 array([ 6, 15]) # 最大最小 np.max(arr1, axis=0/1) np.min(a, axis=0/1)
進階計算dom
arr = np.array([[1,2], [3,4], [5,6]]) #布爾型數組訪問方式 print((arr>2)) """ [[False False] [ True True] [ True True]] """ print(arr[arr>2]) # [3 4 5 6] #修改形狀 arr.reshape(2,3) """ array([[1, 2, 3], [4, 5, 6]]) """ arr.flatten() # 攤平 array([1, 2, 3, 4, 5, 6]) arr.T # 轉置
若你想快速使用sklearn,個人另外一篇博客應該能夠知足您的需求,點擊跳轉:《ML神器:sklearn的快速使用》機器學習
sklearn是python的重要機器學習庫,其中封裝了大量的機器學習算法,如:分類、迴歸、降維以及聚類;還包含了監督學習、非監督學習、數據變換三大模塊。sklearn擁有完善的文檔,使得它具備了上手容易的優點;並它內置了大量的數據集,節省了獲取和整理數據集的時間。於是,使其成爲了普遍應用的重要的機器學習庫。下面簡單介紹一下sklearn下的經常使用方法。工具
sklearn.neighbors #近鄰算法 sklearn.svm #支持向量機 sklearn.kernel_ridge #核-嶺迴歸 sklearn.discriminant_analysis #判別分析 sklearn.linear_model #廣義線性模型 sklearn.ensemble #集成學習 sklearn.tree #決策樹 sklearn.naive_bayes #樸素貝葉斯 sklearn.cross_decomposition #交叉分解 sklearn.gaussian_process #高斯過程 sklearn.neural_network #神經網絡 sklearn.calibration #機率校準 sklearn.isotonic #保守迴歸 sklearn.feature_selection #特徵選擇 sklearn.multiclass #多類多標籤算法
以上的每一個模型都包含多個算法,在調用時直接import便可,譬如:post
from sklearn.linear_model import LogisticRefression lr_model = LogisticRegression()
sklearn.decomposition #矩陣因子分解 sklearn.cluster # 聚類 sklearn.manifold # 流形學習 sklearn.mixture # 高斯混合模型 sklearn.neural_network # 無監督神經網絡 sklearn.covariance # 協方差估計
sklearn.feature_extraction # 特徵提取 sklearn.feature_selection # 特徵選擇 sklearn.preprocessing # 預處理 sklearn.random_projection # 隨機投影 sklearn.kernel_approximation # 核逼近
此外,sklearn還有統一的API接口,咱們一般能夠經過使用徹底相同的接口來實現不一樣的機器學習算法,通常實現流程:
step1. 數據加載和預處理
step2. 定義分類器, 好比: lr_model = LogisticRegression()
step3. 使用訓練集訓練模型 : lr_model.fit(X,Y)
step4. 使用訓練好的模型進行預測: y_pred = lr_model.predict(X_test)
step5. 對模型進行性能評估:lr_model.score(X_test, y_test)
1. 數據集分割
# 做用:將數據集劃分爲 訓練集和測試集 # 格式:train_test_split(*arrays, **options) from sklearn.mode_selection import train_test_split X, y = np.arange(10).reshape((5, 2)), range(5) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42) """
參數
---
arrays:樣本數組,包含特徵向量和標籤
test_size:
float-得到多大比重的測試樣本 (默認:0.25)
int - 得到多少個測試樣本
train_size: 同test_size
random_state:
int - 隨機種子(種子固定,實驗可復現)
shuffle - 是否在分割以前對數據進行洗牌(默認True)
返回
---
分割後的列表,長度=2*len(arrays),
(train-test split) """