python機器學習隨筆

1.scikit-learn數據集API介紹
·sklearn.datasets 加載獲取流行數據集
datasets.load_*() 獲取小規模數據集,數據集包含在datasets裏
datasets.fetch_*() 獲取大規模數據集,須要從網絡上下載,函數的第一個參數是data_home,表示數據集下載的目錄,
默認~/scikit_learn_data/
2.sklearn小數據集
·sklearn.datasets.load_iris() 加載並返回鳶尾花
·sklearn.datasets.load_boston()加載並返回波士頓房價數據集
3.數據集的返回值
·datasets.base.Bunch(繼承自字典)
dict["key"] = values
dict.key = values算法


特徵工程(Feature Engineering)
sklearn 特徵工程
pandas數據清洗 ,數據處理數組

#####特徵抽取/特徵提取#######網絡

特徵提取API
·字典特徵提取(特徵離散化)
·文本特徵提取
·圖像特徵提取
sklearn.feature_extractiondom

·字典特徵提取
sklearn.feature_extraction.DictVectorizer(sparse=True)
DictVectorizer.fit_transform(X) X:字典或者包含字典的迭代器返回值:返回sparse矩陣
sparse表示稀疏矩陣
將非零值 按位置表示出來
節省內存 提升加載效率
DictVectorizer.inverse_transform(X) X:array數組或者sparse矩陣 返回值:轉換以前數據格式
DictVectorizer.get_feature_names() 返回類別名稱
總結:對於特徵當中存在類別信息咱們都會作one-hot編碼處理(不區分優先級)
應用場景:
1.pclass,sex 數據集當中特徵值比較多
DictVectorizer轉換
2.自己拿到的數據就是字典類型函數

·文本特徵提取
單詞 做爲 特徵
句子、短語、字母、單詞均可以做爲特徵
特徵:特徵詞
方法1:CountVectorizer(stop_words=[])
stop_words停用詞
停用詞表
CountVectorizer.fit_transform(X) X:文本或者包含文本字符串的可迭代對象 返回值:返回sparse矩陣
CountVectorizer.inverse_transform(X) X:array數組或者sparse矩陣 返回值:轉換以前數據格
CountVectorizer.get_feature_name() 返回值:單詞列表
關鍵詞:在某一個類別的文章中,出現次數不少,可是在其餘類別的文章當中出現不多
方法2:TfidfVectorizer
TF-IDF 重要程度
兩個詞 「經濟」,「很是」
1000篇文章-語料庫
100篇文章-「很是」
10篇文章-「經濟」
兩篇文章
文章A(100詞):10次「經濟」TF-IDF=0.2
tf = 10/100 = 0.1 IDF=lg(1000/10)=2學習

文章B(100詞):10次「很是」TF-IDF=0.1
tf = 10/100 = 0.1
TF -詞頻(term frequency) IDF=lg(1000/100)=1
IDF-逆向文檔頻率fetch


####數據預處理#####
無量綱化
·歸一化:經過原始數據進行變換把數據映射到(默認爲[0,1])之間
·sklearn.preprocessing.MinMaxScaler(feature_range=(0,1)...)
MinMaxScalar.fit_transform(X)
X:numpy array格式的數據[n_samples,n_features] 參數爲 行 列
·標準化:經過對原始數據進行變換把數據變換到均值爲0,標準差爲1的範圍內
(x-mean)/std
標準差:集中程度
·sklearn.preprocessing.StandardScaler()
StandardScaler.fit_transform(X)
·降維 ndarray
維數:嵌套的層數 0維-標量 1維-向量 2維-矩陣
此處的降維:下降特徵(隨機變量)的個數
效果:特徵與特徵之間不相關
·特徵選擇
Filter過濾式
方差選擇發:低方差特徵過濾 方差小:某個特徵大多樣本的值比較相近

·sklearn.feature_selection.VarianceThreshold(threshold = 0.0)
·刪除全部低方差特徵
·Variance.fit_transform(X)
X:numpy array格式的數據[n_samples,n_features]
返回值:訓練集差別低於threshold的特徵將被刪除。默認值是保留全部
非零方差特徵。即刪除全部相同的特徵值

相關係數-衡量特徵與特徵之間的相關程度
皮爾遜相關係數
Embeded嵌入式
決策樹
正則化
深度學習

·主成分分析:高維數據轉化爲低維數據的過程當中可能會捨棄原有數據、創造新的變量
是數據維度壓縮,儘量下降原數據的維度(複雜性),損失少許信息
應用:迴歸分析或者聚類分析當中
·sklearn.decomposition.PCA(n_components=None)
·將數據分解爲較低維度空間
·n_components:小數:表示保留百分之多少的信息
整數;減小到多少特徵 如二維n_components=2
·PCA.fit_transform(X) X:numpy array格式數據 [n_samples,n_features]
·返回值:轉換後指定維度的array編碼

案例:探究用戶對物品類別的喜愛細分
用戶 物品類別
user_id aisle_id
見jupyter notebookspa

from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import GridSearchCV def knn_iris(): """ 用KNN算法對鳶尾花進行分類 :return: """
    #1)獲取數據
    iris = load_iris() #2)劃分數據集
    x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=6) #3)特徵工程:標準化
    transfer = StandardScaler() x_train= transfer.fit_transform(x_train)#訓練集
 x_test = transfer.transform(x_test) #用訓練集的標準差和平均值作標準化 transform的做用是根據找到的規則對數據進行轉換

    #4)KNN算法預估器
    estimator = KNeighborsClassifier(n_neighbors=3) estimator.fit(x_train,y_train) #5)模型評估
    #方法1:直接比對真實值和預測值
    y_predict = estimator.predict(x_test) print("y_predict:\n",y_predict) print("直接比對真實值和預測值:\n",y_test == y_predict) #方法2:計算準確率
    score= estimator.score(x_test,y_test) print("準確率爲:\n",score) return None def knn_iris_gscv(): """ 用KNN算法對鳶尾花進行分類,添加網格搜索和交叉驗證 :return: """
    #1)獲取數據
    iris = load_iris() #2)劃分數據集
    x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=6) #3)特徵工程:標準化
    transfer = StandardScaler() x_train= transfer.fit_transform(x_train)#訓練集
 x_test = transfer.transform(x_test) #用訓練集的標準差和平均值作標準化 transform的做用是根據找到的規則對數據進行轉換

    #4)KNN算法預估器
    estimator = KNeighborsClassifier() #加入網格搜索與交叉驗證
    #參數準備
    param_dict= {"n_neighbors":[1,3,5,7,9,11]} estimator = GridSearchCV(estimator,param_grid=param_dict,cv = 10) estimator.fit(x_train,y_train) #5)模型評估
    #方法1:直接比對真實值和預測值
    y_predict = estimator.predict(x_test) print("y_predict:\n",y_predict) print("直接比對真實值和預測值:\n",y_test == y_predict) #方法2:計算準確率
    score= estimator.score(x_test,y_test) print("準確率爲:\n",score) # ·最佳參數:best_params_
    print("最佳參數:\n",estimator.best_params_) # ·最佳結果:best_score_
    print("最佳結果:\n",estimator.best_score_) # ·最佳估計器:best_estimator_
    print("最佳估計器:\n",estimator.best_estimator_) # ·交叉驗證結果:cv_results_
    print("交叉驗證結果:\n",estimator.cv_results_) return None if __name__ =="__main__": #代碼1:用KNN算法對鳶尾花進行分類
    # knn_iris()
    knn_iris_gscv()

jupyter notebookcode

#1.獲取數據 #2.合併表 #3.找到user_id和aisle之間的關係 #4.PCA降維
import pandas as pd order_products = pd.read_csv("./instacart/order_products_prior.csv") products = pd.read_csv("./instacart/products.csv") orders = pd.read_csv("./instacart/orders.csv") aisles = pd.read_csv("./instacart/aisles.csv") #2.合併表

#合併aisles和products ,讓aisle和product_id在一塊兒
tab1 = pd.merge(aisles,products,on=["aisle_id","aisle_id"]) tab2 = pd.merge(tab1,order_products,on=["product_id","product_id"]) tab3 = pd.merge(tab2,orders,on=["order_id","order_id"]) #3.找到user_id和aisle之間的關係
table = pd.crosstab[tab3["user_id"],tab3["aisle"]] #4.PCA降維
from sklearn.decomposition import PCA #1.實例化一個轉換器
transfer = PCA(n_components = 0.95) #保存95%的信息

#2.調用fit_transform
data_new = transfer.fit_transform(data)
相關文章
相關標籤/搜索