黑马程序员---三天快速入门Python机器学习(第一天)
機器學習入門
- 一、機器學習概述
- 1.1 人工智能概述
- 1.1.1 機器學習與人工智能、深度學習
- 1.1.2 機器學習、深度學習能做什么
- 1.1.3 人工智能階段課程安排
- 1.2 什么是機器學習
- 1.2.1 定義
- 1.2.2 解釋
- 1.2.3 數據集構成
- 1.3 機器學習算法分類
- 1.3.1 總結
- 1.3.2 練習
- 1.3.3 機器學習算法分類
- 1.4 機器學習開發流程
- 1.5 學習框架和資料介紹
- 1.5.1 機器學習庫與框架
- 1.5.2 書籍資料
- 1.5.3 提深內功
- 二、特征工程
- 2.1 數據集
- 2.1.1 可用數據集
- 2.1.2 sklearn數據集
- 2.1.3 數據集的劃分
- 2.2 特征工程介紹
- 2.2.1 為什么需要特征工程
- 2.2.2 什么是特征工程
- 2.2.3 特征工程的位置與數據處理的比較
- 2.3 特征提取
- 2.3.1 什么是特征提取
- 2.3.2 字典特征提取
- 2.3.3 文本特征提取
- 2.4 特征預處理
- 2.4.1 什么是特征預處理
- 2.4.2 歸一化
- 2.4.3 標準化
- 2.5 特征降維
- 2.5.1 降維
- 2.5.2 降維的兩種方式
- 2.5.3 什么是特征選擇
- 2.6 主成分分析
- 2.6.1 什么是主成分分析(PCA)
- 2.6.2 案例:探究用戶對物品類別的喜好細分降維
- 2.7 機器學習第一天總結
前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站:人工智能從入門到精通教程
一、機器學習概述
1.1 人工智能概述
1.1.1 機器學習與人工智能、深度學習
- 機器學習是人工智能的一個實現途徑
- 深度學習是機器學習的一種方法
1.1.2 機器學習、深度學習能做什么
- 傳統預測:店鋪銷量預測、量化投資、廣告推薦、企業客戶分類、SQL語句安全檢測分類
- 圖像識別:街道交通標志檢測、人臉識別
- 自然語言處理:文本分類、情感分析、自動聊天、文本檢測
1.1.3 人工智能階段課程安排
1.2 什么是機器學習
1.2.1 定義
機器學習是從數據中自動分析獲得模型,并利用模型對未知數據進行預測
1.2.2 解釋
對經驗歸納總結,對未知事物預測
1.2.3 數據集構成
結構:特征值+目標值
注:
- 對于每一行數據我們可以稱為樣本
- 有些數據集可以沒有目標值
1.3 機器學習算法分類
第一種:
識別貓和狗:
特征值:圖片
目標值:貓/狗**-類別**
分類問題
第二種:
房屋價格預測:
特征值:房屋的各個屬性信息
目標值:房屋價格**-連續型的數據**
回歸問題
第三種
特征值:人物的各個屬性信息
目標值:無
無監督學習
1.3.1 總結
1.3.2 練習
說一下他們具體問題分類:
1、預測明天的天氣是多少度? 回歸
2、依存明天是陰天還是晴天還是雨天?分類
3、人臉年齡預測?分類或回歸
4、人臉識別?分類
1.3.3 機器學習算法分類
監督學習:預測
- 定義:輸入數據是由輸入特征和目標值所組成,函數的輸出可以是一個連續的值,稱為回歸;也可以是一個離散的值,稱為分類
- 分類:k-近鄰算法、貝葉斯分類、決策樹與隨機森林、邏輯回歸
- 回歸:線性回歸、嶺回歸
無監督學習
- 定義:輸入數據是由輸入特征值組成
- 聚類:k-means
1.4 機器學習開發流程
流程:
1)獲取數據
2)數據處理
3)特征工程
4)機器學習算法訓練-得到模型
5)模型評估
6)應用
1.5 學習框架和資料介紹
大部分復雜模型的算法設計都是算法工程師在做,而我們
- 分析很多的數據
- 分析具體的業務
- 應用常見的算法
- 特征工程、調參、優化
1.5.1 機器學習庫與框架
1.5.2 書籍資料
1.5.3 提深內功
二、特征工程
2.1 數據集
目標
- 知道數據集分為訓練集和測試集
- 會使用sklearn的數據集
2.1.1 可用數據集
Kaggle網址:https://www.kaggle.com/datasets
UCI數據集網址: http://archive.ics.uci.edu/ml/
scikit-learn網址: http://scikit-learn.org/stable/datasets/index.html#datasets
https://scikit-learn.org.cn/
scikit-learn特點:
- 1、數據量小
- 2、方便學習
UCI特點:
- 1、收錄了360個數據集
- 2、覆蓋科學、生活、經濟等領域
- 3、數據集幾十萬
Kaggle特點:
- 1、大數據競賽平臺
- 2、80萬科學家
- 3、數據量巨大
1 Scikit-learn工具介紹
- Python語言的機器學習工具
- Scikit-learn包括許多知名的機器學習算法的實現
- Scikit-learn文檔完善,容易上手,豐富的API
- 目前穩定版本0.19.1
2 安裝
pip install Scikit-learn -i https://pypi.douban.com/simple安裝好之后可以通過以下命令查看是否安裝成功
import sklearn注:安裝scikit-learn需要Numpy,Scipy等庫
3 Scikit-learn包含的內容
2.1.2 sklearn數據集
1 scikit-learn數據集API介紹
- sklearn.datasets.load_*():獲取小規模數據集,數據包含在datasets里
- sklearn.datasets.fetch_*(data_home=None):獲取大規模數據集,需要從網絡上下載,函數的第一個參數是data_home,表示數據集下載的目錄,默認是**~/scikit_learn_data/**
2 sklearn小數據集
- sklearn.datasets.load_iris():加載并返回鳶尾花數據集
- sklearn.datasets.load_boston():加載并返回波士頓房價數據集
3 sklearn大數據集
sklearn.datasets.fetch_20newsgroups(data=None, subset=‘train’)
- subset:‘train’或者’test’,‘all’,可選,選擇要加載的數據集
- 訓練集的‘訓練’,測試集的‘測試’,兩者的‘全部’
4 sklearn數據集的使用
sklearn數據集返回值介紹
load和fetch返回的數據類型datasets.base.Bunch(字典格式)
- data:特征數據數組,是[n_samples * n_features]的二維numpy.ndarry數組
- target:標簽數組,是n_samples的一維numpy.ndarry數組
- DESCR:數據描述
- feature_names:特征名,新聞數據,手寫數字、回歸數據集沒有
- target_names:標簽名
2.1.3 數據集的劃分
機器學習一般的數據集會劃分為兩個部分:
- 訓練數據:用于訓練,構建模型
- 測試數據:在模型檢驗時使用,用于評估模型是否有效
劃分比例:
- 訓練集:70%、80%
- 測試集:30%、20%
數據集劃分api:sklearn.model_selection.train_test_split(arrays, *options)
- x 數據集的特征值
- y 數據集的標簽值
- test_size測試集的大小,一般為float
- random_state隨機數種子,不同的種子會造成不同的隨機采樣結果。相同的種子采樣結果相同
- return訓練集特征值,測試集特征值,訓練集目標值,測試集目標值
2.2 特征工程介紹
2.2.1 為什么需要特征工程
數據和特征決定了機器學習的上限,而模型和算法只是逼近這個上限而已
2.2.2 什么是特征工程
特征工程是使用專業背景知識和技巧處理數據,使得特征能在機器學習算法上發揮更好的作用的過程
意義:會直接影響機器學習的效果
2.2.3 特征工程的位置與數據處理的比較
- pandas:一個數據讀取非常方便以及基本的處理格式的工具
- sklearn:對于特征的處理提供了強大的接口
特征工程包含內容:
- 特征抽取/特征提取
- 特征預處理
- 特征降維
什么是特征提取?
2.3 特征提取
2.3.1 什么是特征提取
1 將任意數據(如文本或圖像)轉換為可用于機器學習的數字特征
注:特征值是為了計算機更好的去理解數據
- 字典特征提取(特征離散化)
- 文本特征提取
- 圖像特征提取(深度學習再介紹)
2 特征提取API
sklearn.feature_extraction2.3.2 字典特征提取
作用:對字典數據進行特征值化
sklearn.feature_extraction.DictVectorizer(sparse=True, …)
- DictVectorizer.fit_transform(X), X:字典或者包含字典的迭代器返回值,返回sparse矩陣
- DictVectorizer.inverse_transform(X), X:array數組或者sparse矩陣 返回值:轉換之前數據格式
- DictVectorizer.get_feature_names():返回類別名稱
1 應用
對數據進行特征提取:將類別轉換為one-hot編碼,節省內存,提高下載效率
2.3.3 文本特征提取
單詞作為特征
作用:對文本數據進行特征值化
sklearn.feature_extraction.text.CountVectorizer(stop_words=[]):返回詞頻矩陣
- CountVectorizer.fit_transform(X),X:文本或者包含文本字符串的可迭代對象,返回值:返回sparse矩陣
- CountVectorizer.inverse_transform(X),X:array數組或者sparse矩陣,返回值:轉換之前數據格
- CountVectorizer.get_feature_names():返回值:單詞列表
sklearn.feature_extraction.text.TfidVectorizer
1 應用
英文文本分詞
停用詞:stop_words=[]
from sklearn.feature_extraction.text import CountVectorizerdef count_demo():"""文本特征抽取:CountVectorizer:return:"""data = ['life is short,i like like python','life is too long,i dislike python']# 1、實例化一個轉換器類transfer = CountVectorizer(stop_words=['is', 'too'])# 2、調用fit_transformdata_new = transfer.fit_transform(data)print("data_new:\n", data_new.toarray()) # toarray轉換為二維數組print("特征名字:\n", transfer.get_feature_names())return Noneif __name__ == "__main__":count_demo() data_new:[[0 1 2 0 1 1][1 1 0 1 1 0]] 特征名字:['dislike', 'life', 'like', 'long', 'python', 'short']中文文本分詞
注意:不支持單個中文詞!
這個方法是計算特征詞出現的個數的
例2
from sklearn.feature_extraction.text import CountVectorizer import jiebadef count_chinese_demo2():"""中文文本特征抽取,自動分詞:return:"""data = ['一種還是一種今天很殘酷,明天更殘酷,后天很美好,但絕對大部分是死在明天晚上,所以每個人不要放棄今天。','我們看到的從很遠星系來的光是在幾百萬年之前發出的,這樣當我們看到宇宙時,我們是在看它的過去。','如果只用一種方式了解某件事物,他就不會真正了解它。了解事物真正含義的秘密取決于如何將其與我們所了解的事物相聯系。']data_new = []for sent in data:data_new.append(cut_word(sent))print(data_new)# 1、實例化一個轉換器類transfer = CountVectorizer()# 2、調用fit_transformdata_final = transfer.fit_transform(data_new)print("data_final:\n", data_final.toarray())print("特征名字:\n", transfer.get_feature_names())return Nonedef cut_word(text):"""進行中文分詞:“我愛北京天安門” -> "我 愛 北京 天安門":param text::return:"""return ' '.join(jieba.cut(text))if __name__ == "__main__":count_chinese_demo2()#print(cut_word('我愛北京天安門')) ['一種 還是 一種 今天 很 殘酷 , 明天 更 殘酷 , 后天 很 美好 , 但 絕對 大部分 是 死 在 明天 晚上 , 所以 每個 人 不要 放棄 今天 。', '我們 看到 的 從 很 遠 星系 來 的 光是在 幾百萬年 之前 發出 的 , 這樣 當 我們 看到 宇宙 時 , 我們 是 在 看 它 的 過去 。', '如果 只用 一種 方式 了解 某件事 物 , 他 就 不會 真正 了解 它 。 了解 事物 真正 含義 的 秘密 取決于 如何 將 其 與 我們 所 了解 的 事物 相 聯系 。'] data_final:[[2 0 1 0 0 0 2 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 2 0 1 0 2 1 0 0 0 1 1 0 0 10][0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 3 0 0 0 0 1 0 0 0 0 2 0 0 0 0 0 1 01][1 1 0 0 4 2 0 0 0 0 1 1 0 1 0 1 1 0 1 0 0 1 0 0 0 1 0 0 0 2 1 0 0 1 0 00]] 特征名字:['一種', '不會', '不要', '之前', '了解', '事物', '今天', '光是在', '幾百萬年', '發出', '取決于', '只用', '后天', '含義', '大部分', '如何', '如果', '宇宙', '我們', '所以', '放棄', '方式', '明天', '星系', '晚上', '某件事', '殘酷', '每個', '看到', '真正', '秘密', '絕對', '美好', '聯系', '過去', '還是', '這樣']關鍵詞:在某一個類別的文章中,出現的次數很多,但是在其他類別的文章當中出現很少
5 Tf-idf文本特征提取
- Tf-idf的主要思想是:如果某個詞或短語在一篇文章中出現的概率高,并且在其他文章中很少出現,則認為此詞或者短語具有很好的類別區分能力,適合用來分來
- Tf-idf作用:用以評估一字詞對于一個文件集或一個語料庫中的其中一份文件的重要程度
這種方法是計算特征詞的重要程度的
TF-IDF:衡量重要程度
TF:詞頻
IDF:逆向文檔頻率,可以由總文件數目 / 包含該詞語之文件的數目,再將得到的商取以10為底的對數得到
2.4 特征預處理
2.4.1 什么是特征預處理
通過一些轉換函數,將特征數據轉換成更適合算法模型的特征數據的過程
數值數據的無量綱化:
- 歸一化
- 標準化
2 特征預處理API
sklearn.preprocessing為什么要進行歸一化/標準化?
- 特征的單位或者大小相差較大,或者某特征的方法相比其他的特征要大出幾個數量級,容易影響(支配)目標結果,使得一些算法無法學習到其它的特征
2.4.2 歸一化
1 定義
通過對原始的數據進行變換把數據映射到(默認為[0,1]之間)
2 公式
3 API
sklearn.preprocessing.MinMaxScaler(feature_range=(0,1)…)
MinMaxScaler.fit_transform(X),X:numpy array格式的數據[n_samples,n_features],返回值:轉換后的形式相同的array
4 數據計算
import pandas as pd from sklearn.preprocessing import MinMaxScalerdef minmax_demo():"""歸一化:return:"""# 1、獲取數據data = pd.read_csv("datingTestSet2.txt", sep='\t')data = data.iloc[:, :3]print("data:\n", data)# 2、實例化一個轉換器類transform = MinMaxScaler()#transform = MinMaxScaler(feature_range=[2,3])# 3、調用fit_transformdata_new = transform.fit_transform(data)print("data_new:\n", data_new)return Noneif __name__ == "__main__":minmax_demo()
問題:如果有異常值會有什么影響
異常值:最大值,最小值
5 歸一化總結
注意最大值最小值是變化的,另外,最大值與最小值非常容易受到異常值影響,
所以這種方法魯棒性較差,只適合傳統精確小數據場景
2.4.3 標準化
1 定義
通過對原始數據進行變換把數據變換到均值為0,標準差為1的范圍內
2 公式
- 對于歸一化來說:如果出現異常點,影響了最大值和最小值,name結果顯然會發生改變
- 對于標準化來說,如果出現異常點,由于具有一定數據量,少量的異常點對于平均值的影響不大,從而方差改變較小
4 代碼
sklearn.perprocessing.StandradScaler()
處理之后,對每列來說,所有數據都聚集在均值為0附近,標準差為1
StandardScaler.fit_transform(X),X;numpy array格式的數據[n_samples,n_features],返回值:轉化后的形狀相同的array
5 標準化總結
在已有樣本足夠多的情況下比較穩定,適合現代嘈雜大數據場景
2.5 特征降維
2.5.1 降維
降維是指在某些限定條件下,降低隨機變量(特征)個數,得到一組“不相關”主變量的過程
2.5.2 降維的兩種方式
- 特征選擇
- 主成分分析(可以理解一種特征提取的方式)
2.5.3 什么是特征選擇
1 定義
數據中包含冗余或相關變量(或稱特征、屬性、指標等),旨在從原有特征中找出主要特征
2 方法
Filter過濾式:主要探究特征本身特點、特征與特征和目標值之間關聯
- (1)方差選擇法:低方差特征過濾
- (2)相關系數:特征與特征之間的相關程度
Embedded嵌入式:算法自動選擇特征(特征與目標值之間的關聯)
- (1)決策樹:信息熵、信息增益
- (2)正則化:L1,L2
- (3)深度學習:卷積等
3 模塊
sklearn.feature_selection4 過濾式
4.1 低方差特征過濾
刪除低方差的一些特征
- 特征方差小:某個特征大多樣本的值比較相近
- 特征方差大:某個特征很多樣本的值都有差別
4.1.1 API
sklearn.feature_selection.VArianceThreshold(threshold=0.0)
刪除所有低方差特征
Variance.fit_transform(X),X:numpy array格式的數據[m_sample,n_features],返回值:訓練集差異低于threadshold的特征將被刪除。默認值是保留非零方差特征,即刪除所有樣本中具有相同值的特征
4.1.2 數據計算
from sklearn.feature_selection import VarianceThresholddef variance_demo():"""低方差特征過濾:return:"""# 1、獲取數據data = pd.read_csv('factor_returns.csv')print('data:\n', data)data = data.iloc[:,1:-2]print('data:\n', data)# 2、實例化一個轉換器類#transform = VarianceThreshold()transform = VarianceThreshold(threshold=10)# 3、調用fit_transformdata_new = transform.fit_transform(data)print("data_new\n", data_new, data_new.shape)return Noneif __name__ == "__main__":variance_demo()4.2 相關系數
皮爾遜相關系數(Pearson Correlation Coefficient):反映變量之間相關關系密切程度的統計指標
公式:
計算過程
4.2.3 特點
相關系數的值介于-1與+1之間,即-1<=r<=+1。其性質如下:
- 當r>0時,表示兩變量正相關;r<0時,兩變量為負相關
- 當|r|=1時,表示兩變量為完全相關;當r=0時,表示兩變量間無相關關系
- 當0<|r|<1時,表示兩變量存在一定程度的相關。且|r|越接近1,兩變量間線性關系越密切;|r|越接近0,表示兩變量的線性相關越弱
- 一般可按三級劃分:|r|<0.4為低度相關;0.4<=|r|<0.7為顯著相關;0.7<=|r|<1為高維線性相關
4.2.4 API
from scipy.stats import pearsonr- x:(N.)array_like
- y:(N.)array_like Returns:(Perason’s correlation coefficient, p-value)
相關系數看前面那個
如果特征與特征相關性很高:
1)選取其中一個
2)加權求和
3)主成分分析
2.6 主成分分析
2.6.1 什么是主成分分析(PCA)
定義:高維數據轉換為低維數據的過程,在此過程中可能會舍棄原有數據、創造新的變量
作用:是數據維數的壓縮,盡可能降低原數據的維數(復雜度),損失少量信息
應用:回歸分析或者聚類分析中
1 計算案例理解
二維降到一維
2 代碼
sklearn.decomposition.PCA(n_components=None)
- 將數據分解為較低維度空間
- n_components:
-
- 小數:表示保留百分之多少的信息
-
- 整數:減少到多少特征
PCA.fit_transform(X),X:numpy array格式的數據[N_samples, n_features],返回值:轉換后指定維度的array
- 整數:減少到多少特征
3 數據計算
from sklearn.decomposition import PCAdef pca_demo():"""PCA降維:return:"""data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]# 1、實例化一個轉換器類transform = PCA(n_components=2) # 4個特征降到2個特征# 2、調用fit_transformdata_new = transform.fit_transform(data)print("data_new\n", data_new)transform2 = PCA(n_components=0.95) # 保留95%的信息data_new2 = transform2.fit_transform(data)print("data_new2\n", data_new2)return Noneif __name__ == "__main__":pca_demo() data_new[[ 1.28620952e-15 3.82970843e+00][ 5.74456265e+00 -1.91485422e+00][-5.74456265e+00 -1.91485422e+00]] data_new2[[ 1.28620952e-15 3.82970843e+00][ 5.74456265e+00 -1.91485422e+00][-5.74456265e+00 -1.91485422e+00]]2.6.2 案例:探究用戶對物品類別的喜好細分降維
數據:
1)order_prodects_prior.csv:訂單與商品信息
-
- 字段:order_id, product_id, add_to_cart_order, reordered
2)products.csv:商品信息
- 字段:order_id, product_id, add_to_cart_order, reordered
-
- 字段:product_id, product_name, aisle_id, department_id
3)order.csv:用戶的訂單信息
- 字段:product_id, product_name, aisle_id, department_id
-
- 字段:order_id, user_id, eval_set, order_number, …
4)aisles.csv:商品所屬具體物品類別
- 字段:order_id, user_id, eval_set, order_number, …
-
- 字段:aisle_id, aisle
處理成這個樣子
需求
1)需要將user_id和aisle放在同一個表中—合并
2)找到user_id和aisle----交叉表和透視表
2.7 機器學習第一天總結
總結
以上是生活随笔為你收集整理的黑马程序员---三天快速入门Python机器学习(第一天)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: figma下载_不用担心Figma中的间
- 下一篇: Retinex算法,图像色彩增强之pyt