日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

黑马程序员---三天快速入门Python机器学习(第一天)

發(fā)布時(shí)間:2023/12/9 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 黑马程序员---三天快速入门Python机器学习(第一天) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

機(jī)器學(xué)習(xí)入門(mén)

  • 一、機(jī)器學(xué)習(xí)概述
    • 1.1 人工智能概述
      • 1.1.1 機(jī)器學(xué)習(xí)與人工智能、深度學(xué)習(xí)
      • 1.1.2 機(jī)器學(xué)習(xí)、深度學(xué)習(xí)能做什么
      • 1.1.3 人工智能階段課程安排
    • 1.2 什么是機(jī)器學(xué)習(xí)
      • 1.2.1 定義
      • 1.2.2 解釋
      • 1.2.3 數(shù)據(jù)集構(gòu)成
    • 1.3 機(jī)器學(xué)習(xí)算法分類
      • 1.3.1 總結(jié)
      • 1.3.2 練習(xí)
      • 1.3.3 機(jī)器學(xué)習(xí)算法分類
    • 1.4 機(jī)器學(xué)習(xí)開(kāi)發(fā)流程
    • 1.5 學(xué)習(xí)框架和資料介紹
      • 1.5.1 機(jī)器學(xué)習(xí)庫(kù)與框架
      • 1.5.2 書(shū)籍資料
      • 1.5.3 提深內(nèi)功
  • 二、特征工程
    • 2.1 數(shù)據(jù)集
      • 2.1.1 可用數(shù)據(jù)集
      • 2.1.2 sklearn數(shù)據(jù)集
      • 2.1.3 數(shù)據(jù)集的劃分
    • 2.2 特征工程介紹
      • 2.2.1 為什么需要特征工程
      • 2.2.2 什么是特征工程
      • 2.2.3 特征工程的位置與數(shù)據(jù)處理的比較
    • 2.3 特征提取
      • 2.3.1 什么是特征提取
      • 2.3.2 字典特征提取
      • 2.3.3 文本特征提取
    • 2.4 特征預(yù)處理
      • 2.4.1 什么是特征預(yù)處理
      • 2.4.2 歸一化
      • 2.4.3 標(biāo)準(zhǔn)化
    • 2.5 特征降維
      • 2.5.1 降維
      • 2.5.2 降維的兩種方式
      • 2.5.3 什么是特征選擇
    • 2.6 主成分分析
      • 2.6.1 什么是主成分分析(PCA)
      • 2.6.2 案例:探究用戶對(duì)物品類別的喜好細(xì)分降維
    • 2.7 機(jī)器學(xué)習(xí)第一天總結(jié)


前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到網(wǎng)站:人工智能從入門(mén)到精通教程




一、機(jī)器學(xué)習(xí)概述

1.1 人工智能概述

1.1.1 機(jī)器學(xué)習(xí)與人工智能、深度學(xué)習(xí)

  • 機(jī)器學(xué)習(xí)是人工智能的一個(gè)實(shí)現(xiàn)途徑
  • 深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一種方法

1.1.2 機(jī)器學(xué)習(xí)、深度學(xué)習(xí)能做什么

  • 傳統(tǒng)預(yù)測(cè):店鋪銷(xiāo)量預(yù)測(cè)、量化投資、廣告推薦、企業(yè)客戶分類、SQL語(yǔ)句安全檢測(cè)分類
  • 圖像識(shí)別:街道交通標(biāo)志檢測(cè)、人臉識(shí)別
  • 自然語(yǔ)言處理:文本分類、情感分析、自動(dòng)聊天、文本檢測(cè)

1.1.3 人工智能階段課程安排

1.2 什么是機(jī)器學(xué)習(xí)

1.2.1 定義

機(jī)器學(xué)習(xí)是從數(shù)據(jù)中自動(dòng)分析獲得模型,并利用模型對(duì)未知數(shù)據(jù)進(jìn)行預(yù)測(cè)

1.2.2 解釋


對(duì)經(jīng)驗(yàn)歸納總結(jié),對(duì)未知事物預(yù)測(cè)

1.2.3 數(shù)據(jù)集構(gòu)成

結(jié)構(gòu):特征值+目標(biāo)值

注:

  • 對(duì)于每一行數(shù)據(jù)我們可以稱為樣本
  • 有些數(shù)據(jù)集可以沒(méi)有目標(biāo)值

1.3 機(jī)器學(xué)習(xí)算法分類

第一種:

識(shí)別貓和狗:
特征值:圖片
目標(biāo)值:貓/狗**-類別**
分類問(wèn)題

第二種:


房屋價(jià)格預(yù)測(cè):
特征值:房屋的各個(gè)屬性信息
目標(biāo)值:房屋價(jià)格**-連續(xù)型的數(shù)據(jù)**
回歸問(wèn)題

第三種

特征值:人物的各個(gè)屬性信息
目標(biāo)值:無(wú)
無(wú)監(jiān)督學(xué)習(xí)

1.3.1 總結(jié)

1.3.2 練習(xí)

說(shuō)一下他們具體問(wèn)題分類:
1、預(yù)測(cè)明天的天氣是多少度? 回歸
2、依存明天是陰天還是晴天還是雨天?分類
3、人臉年齡預(yù)測(cè)?分類或回歸
4、人臉識(shí)別?分類

1.3.3 機(jī)器學(xué)習(xí)算法分類

監(jiān)督學(xué)習(xí):預(yù)測(cè)

  • 定義:輸入數(shù)據(jù)是由輸入特征和目標(biāo)值所組成,函數(shù)的輸出可以是一個(gè)連續(xù)的值,稱為回歸;也可以是一個(gè)離散的值,稱為分類
  • 分類:k-近鄰算法、貝葉斯分類、決策樹(shù)與隨機(jī)森林、邏輯回歸
  • 回歸:線性回歸、嶺回歸

無(wú)監(jiān)督學(xué)習(xí)

  • 定義:輸入數(shù)據(jù)是由輸入特征值組成
  • 聚類:k-means

1.4 機(jī)器學(xué)習(xí)開(kāi)發(fā)流程


流程:
1)獲取數(shù)據(jù)
2)數(shù)據(jù)處理
3)特征工程
4)機(jī)器學(xué)習(xí)算法訓(xùn)練-得到模型
5)模型評(píng)估
6)應(yīng)用

1.5 學(xué)習(xí)框架和資料介紹

大部分復(fù)雜模型的算法設(shè)計(jì)都是算法工程師在做,而我們

  • 分析很多的數(shù)據(jù)
  • 分析具體的業(yè)務(wù)
  • 應(yīng)用常見(jiàn)的算法
  • 特征工程、調(diào)參、優(yōu)化

1.5.1 機(jī)器學(xué)習(xí)庫(kù)與框架

1.5.2 書(shū)籍資料

1.5.3 提深內(nèi)功




二、特征工程

2.1 數(shù)據(jù)集

目標(biāo)

  • 知道數(shù)據(jù)集分為訓(xùn)練集和測(cè)試集
  • 會(huì)使用sklearn的數(shù)據(jù)集

2.1.1 可用數(shù)據(jù)集

Kaggle網(wǎng)址:https://www.kaggle.com/datasets
UCI數(shù)據(jù)集網(wǎng)址: http://archive.ics.uci.edu/ml/
scikit-learn網(wǎng)址: http://scikit-learn.org/stable/datasets/index.html#datasets
https://scikit-learn.org.cn/

scikit-learn特點(diǎn):

  • 1、數(shù)據(jù)量小
  • 2、方便學(xué)習(xí)

UCI特點(diǎn):

  • 1、收錄了360個(gè)數(shù)據(jù)集
  • 2、覆蓋科學(xué)、生活、經(jīng)濟(jì)等領(lǐng)域
  • 3、數(shù)據(jù)集幾十萬(wàn)

Kaggle特點(diǎn):

  • 1、大數(shù)據(jù)競(jìng)賽平臺(tái)
  • 2、80萬(wàn)科學(xué)家
  • 3、數(shù)據(jù)量巨大

1 Scikit-learn工具介紹

  • Python語(yǔ)言的機(jī)器學(xué)習(xí)工具
  • Scikit-learn包括許多知名的機(jī)器學(xué)習(xí)算法的實(shí)現(xiàn)
  • Scikit-learn文檔完善,容易上手,豐富的API
  • 目前穩(wěn)定版本0.19.1

2 安裝

pip install Scikit-learn -i https://pypi.douban.com/simple

安裝好之后可以通過(guò)以下命令查看是否安裝成功

import sklearn

注:安裝scikit-learn需要Numpy,Scipy等庫(kù)

3 Scikit-learn包含的內(nèi)容

2.1.2 sklearn數(shù)據(jù)集

1 scikit-learn數(shù)據(jù)集API介紹

  • sklearn.datasets.load_*():獲取小規(guī)模數(shù)據(jù)集,數(shù)據(jù)包含在datasets里
  • sklearn.datasets.fetch_*(data_home=None):獲取大規(guī)模數(shù)據(jù)集,需要從網(wǎng)絡(luò)上下載,函數(shù)的第一個(gè)參數(shù)是data_home,表示數(shù)據(jù)集下載的目錄,默認(rèn)是**~/scikit_learn_data/**

2 sklearn小數(shù)據(jù)集

  • sklearn.datasets.load_iris():加載并返回鳶尾花數(shù)據(jù)集
  • sklearn.datasets.load_boston():加載并返回波士頓房?jī)r(jià)數(shù)據(jù)集

3 sklearn大數(shù)據(jù)集
sklearn.datasets.fetch_20newsgroups(data=None, subset=‘train’)

  • subset:‘train’或者’test’,‘a(chǎn)ll’,可選,選擇要加載的數(shù)據(jù)集
  • 訓(xùn)練集的‘訓(xùn)練’,測(cè)試集的‘測(cè)試’,兩者的‘全部’

4 sklearn數(shù)據(jù)集的使用
sklearn數(shù)據(jù)集返回值介紹
load和fetch返回的數(shù)據(jù)類型datasets.base.Bunch(字典格式

  • data:特征數(shù)據(jù)數(shù)組,是[n_samples * n_features]的二維numpy.ndarry數(shù)組
  • target:標(biāo)簽數(shù)組,是n_samples的一維numpy.ndarry數(shù)組
  • DESCR:數(shù)據(jù)描述
  • feature_names:特征名,新聞數(shù)據(jù),手寫(xiě)數(shù)字、回歸數(shù)據(jù)集沒(méi)有
  • target_names:標(biāo)簽名
from sklearn.datasets import load_irisdef datasets_demo():"""sklearn數(shù)據(jù)集使用:return:"""# 獲取數(shù)據(jù)集iris = load_iris()print("鳶尾花數(shù)據(jù)集:\n", iris)print("查看數(shù)據(jù)集描述:\n", iris["DESCR"]) # 數(shù)據(jù)集的描述信息print("查看特征值的名字:\n", iris.feature_names)print("查看特征值:\n", iris.data, iris.data.shape) # shape:(150,4)return Noneif __name__ == "__main__":datasets_demo() 查看特征值的名字:['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']

2.1.3 數(shù)據(jù)集的劃分

機(jī)器學(xué)習(xí)一般的數(shù)據(jù)集會(huì)劃分為兩個(gè)部分:

  • 訓(xùn)練數(shù)據(jù):用于訓(xùn)練,構(gòu)建模型
  • 測(cè)試數(shù)據(jù):在模型檢驗(yàn)時(shí)使用,用于評(píng)估模型是否有效

劃分比例:

  • 訓(xùn)練集:70%、80%
  • 測(cè)試集:30%、20%

數(shù)據(jù)集劃分api:sklearn.model_selection.train_test_split(arrays, *options)

  • x 數(shù)據(jù)集的特征值
  • y 數(shù)據(jù)集的標(biāo)簽值
  • test_size測(cè)試集的大小,一般為float
  • random_state隨機(jī)數(shù)種子,不同的種子會(huì)造成不同的隨機(jī)采樣結(jié)果。相同的種子采樣結(jié)果相同
  • return訓(xùn)練集特征值,測(cè)試集特征值,訓(xùn)練集目標(biāo)值,測(cè)試集目標(biāo)值
from sklearn.datasets import load_iris from sklearn.model_selection import train_test_splitdef datasets_demo():"""sklearn數(shù)據(jù)集使用:return:"""# 獲取數(shù)據(jù)集iris = load_iris()print("鳶尾花數(shù)據(jù)集:\n", iris)print("查看數(shù)據(jù)集描述:\n", iris["DESCR"])print("查看特征值的名字:\n", iris.feature_names)print("查看特征值:\n", iris.data, iris.data.shape) # 150個(gè)樣本# 數(shù)據(jù)集劃分 X為特征 Y為標(biāo)簽x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)print("訓(xùn)練集的特征值:\n", x_train, x_train.shape) # 120個(gè)樣本return Noneif __name__ == "__main__":datasets_demo()

2.2 特征工程介紹

2.2.1 為什么需要特征工程

數(shù)據(jù)和特征決定了機(jī)器學(xué)習(xí)的上限,而模型和算法只是逼近這個(gè)上限而已

2.2.2 什么是特征工程

特征工程是使用專業(yè)背景知識(shí)和技巧處理數(shù)據(jù),使得特征能在機(jī)器學(xué)習(xí)算法上發(fā)揮更好的作用的過(guò)程
意義:會(huì)直接影響機(jī)器學(xué)習(xí)的效果

2.2.3 特征工程的位置與數(shù)據(jù)處理的比較

  • pandas:一個(gè)數(shù)據(jù)讀取非常方便以及基本的處理格式的工具
  • sklearn:對(duì)于特征的處理提供了強(qiáng)大的接口

特征工程包含內(nèi)容:

  • 特征抽取/特征提取
  • 特征預(yù)處理
  • 特征降維

什么是特征提取?

2.3 特征提取

2.3.1 什么是特征提取

1 將任意數(shù)據(jù)(如文本或圖像)轉(zhuǎn)換為可用于機(jī)器學(xué)習(xí)的數(shù)字特征
注:特征值是為了計(jì)算機(jī)更好的去理解數(shù)據(jù)

  • 字典特征提取(特征離散化)
  • 文本特征提取
  • 圖像特征提取(深度學(xué)習(xí)再介紹)

2 特征提取API

sklearn.feature_extraction

2.3.2 字典特征提取

作用:對(duì)字典數(shù)據(jù)進(jìn)行特征值化

sklearn.feature_extraction.DictVectorizer(sparse=True, …)

  • DictVectorizer.fit_transform(X), X:字典或者包含字典的迭代器返回值,返回sparse矩陣
  • DictVectorizer.inverse_transform(X), X:array數(shù)組或者sparse矩陣 返回值:轉(zhuǎn)換之前數(shù)據(jù)格式
  • DictVectorizer.get_feature_names():返回類別名稱

1 應(yīng)用
對(duì)數(shù)據(jù)進(jìn)行特征提取:將類別轉(zhuǎn)換為one-hot編碼,節(jié)省內(nèi)存,提高下載效率

from sklearn.feature_extraction import DictVectorizerdef dict_demo():"""字典特征抽取:return:"""data = [{'city':'北京', 'temperature':100},{'city':'上海', 'temperature':60},{'city':'深圳', 'temperature':30}]# 1、實(shí)例化一個(gè)轉(zhuǎn)換器類#transfer = DictVectorizer() # 返回sparse矩陣transfer = DictVectorizer(sparse=False)# 2、調(diào)用fit_transform()data_new = transfer.fit_transform(data)print("data_new:\n", data_new) # 轉(zhuǎn)化后的print("特征名字:\n", transfer.get_feature_names())return Noneif __name__ == "__main__":dict_demo() data_new:[[ 0. 1. 0. 100.][ 1. 0. 0. 60.][ 0. 0. 1. 30.]]特征名字:['city=上海', 'city=北京', 'city=深圳', 'temperature']

2.3.3 文本特征提取

單詞作為特征

作用:對(duì)文本數(shù)據(jù)進(jìn)行特征值化

sklearn.feature_extraction.text.CountVectorizer(stop_words=[]):返回詞頻矩陣

  • CountVectorizer.fit_transform(X),X:文本或者包含文本字符串的可迭代對(duì)象,返回值:返回sparse矩陣
  • CountVectorizer.inverse_transform(X),X:array數(shù)組或者sparse矩陣,返回值:轉(zhuǎn)換之前數(shù)據(jù)格
  • CountVectorizer.get_feature_names():返回值:單詞列表

sklearn.feature_extraction.text.TfidVectorizer

1 應(yīng)用
英文文本分詞

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、實(shí)例化一個(gè)轉(zhuǎn)換器類transfer = CountVectorizer()# 2、調(diào)用fit_transformdata_new = transfer.fit_transform(data)print("data_new:\n", data_new.toarray()) # toarray轉(zhuǎn)換為二維數(shù)組print("特征名字:\n", transfer.get_feature_names())return Noneif __name__ == "__main__":count_demo() data_new:[[0 1 1 2 0 1 1 0][1 1 1 0 1 1 0 1]] 特征名字:['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']

停用詞: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、實(shí)例化一個(gè)轉(zhuǎn)換器類transfer = CountVectorizer(stop_words=['is', 'too'])# 2、調(diào)用fit_transformdata_new = transfer.fit_transform(data)print("data_new:\n", data_new.toarray()) # toarray轉(zhuǎn)換為二維數(shù)組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']

中文文本分詞
注意:不支持單個(gè)中文詞!
這個(gè)方法是計(jì)算特征詞出現(xiàn)的個(gè)數(shù)的

from sklearn.feature_extraction.text import CountVectorizerdef count_demo():"""文本特征抽取:CountVectorizer:return:"""data = ['我 愛(ài) 北京 天安門(mén)','天安門(mén) 上 太陽(yáng) 升']# 1、實(shí)例化一個(gè)轉(zhuǎn)換器類transfer = CountVectorizer()# 2、調(diào)用fit_transformdata_new = transfer.fit_transform(data)print("data_new:\n", data_new.toarray()) # toarray轉(zhuǎn)換為二維數(shù)組print("特征名字:\n", transfer.get_feature_names())return Noneif __name__ == "__main__":count_demo() data_new:[[1 1 0][0 1 1]] 特征名字:['北京', '天安門(mén)', '太陽(yáng)']

例2

from sklearn.feature_extraction.text import CountVectorizer import jiebadef count_chinese_demo2():"""中文文本特征抽取,自動(dòng)分詞:return:"""data = ['一種還是一種今天很殘酷,明天更殘酷,后天很美好,但絕對(duì)大部分是死在明天晚上,所以每個(gè)人不要放棄今天。','我們看到的從很遠(yuǎn)星系來(lái)的光是在幾百萬(wàn)年之前發(fā)出的,這樣當(dāng)我們看到宇宙時(shí),我們是在看它的過(guò)去。','如果只用一種方式了解某件事物,他就不會(huì)真正了解它。了解事物真正含義的秘密取決于如何將其與我們所了解的事物相聯(lián)系。']data_new = []for sent in data:data_new.append(cut_word(sent))print(data_new)# 1、實(shí)例化一個(gè)轉(zhuǎn)換器類transfer = CountVectorizer()# 2、調(diào)用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):"""進(jìn)行中文分詞:“我愛(ài)北京天安門(mén)” -> "我 愛(ài) 北京 天安門(mén)":param text::return:"""return ' '.join(jieba.cut(text))if __name__ == "__main__":count_chinese_demo2()#print(cut_word('我愛(ài)北京天安門(mén)')) ['一種 還是 一種 今天 很 殘酷 , 明天 更 殘酷 , 后天 很 美好 , 但 絕對(duì) 大部分 是 死 在 明天 晚上 , 所以 每個(gè) 人 不要 放棄 今天 。', '我們 看到 的 從 很 遠(yuǎn) 星系 來(lái) 的 光是在 幾百萬(wàn)年 之前 發(fā)出 的 , 這樣 當(dāng) 我們 看到 宇宙 時(shí) , 我們 是 在 看 它 的 過(guò)去 。', '如果 只用 一種 方式 了解 某件事 物 , 他 就 不會(huì) 真正 了解 它 。 了解 事物 真正 含義 的 秘密 取決于 如何 將 其 與 我們 所 了解 的 事物 相 聯(lián)系 。'] 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]] 特征名字:['一種', '不會(huì)', '不要', '之前', '了解', '事物', '今天', '光是在', '幾百萬(wàn)年', '發(fā)出', '取決于', '只用', '后天', '含義', '大部分', '如何', '如果', '宇宙', '我們', '所以', '放棄', '方式', '明天', '星系', '晚上', '某件事', '殘酷', '每個(gè)', '看到', '真正', '秘密', '絕對(duì)', '美好', '聯(lián)系', '過(guò)去', '還是', '這樣']

關(guān)鍵詞:在某一個(gè)類別的文章中,出現(xiàn)的次數(shù)很多,但是在其他類別的文章當(dāng)中出現(xiàn)很少

5 Tf-idf文本特征提取

  • Tf-idf的主要思想是:如果某個(gè)詞或短語(yǔ)在一篇文章中出現(xiàn)的概率高,并且在其他文章中很少出現(xiàn),則認(rèn)為此詞或者短語(yǔ)具有很好的類別區(qū)分能力,適合用來(lái)分來(lái)
  • Tf-idf作用:用以評(píng)估一字詞對(duì)于一個(gè)文件集或一個(gè)語(yǔ)料庫(kù)中的其中一份文件的重要程度
    這種方法是計(jì)算特征詞的重要程度的
    TF-IDF:衡量重要程度
    TF:詞頻
    IDF:逆向文檔頻率,可以由總文件數(shù)目 / 包含該詞語(yǔ)之文件的數(shù)目,再將得到的商取以10為底的對(duì)數(shù)得到
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer import jiebadef cut_word(text):"""進(jìn)行中文分詞:“我愛(ài)北京天安門(mén)” -> "我 愛(ài) 北京 天安門(mén)":param text::return:"""return ' '.join(jieba.cut(text))def tfidf_demo():"""用TF-IDF的方法進(jìn)行文本特征抽取:return:"""data = ['一種還是一種今天很殘酷,明天更殘酷,后天很美好,但絕對(duì)大部分是死在明天晚上,所以每個(gè)人不要放棄今天。','我們看到的從很遠(yuǎn)星系來(lái)的光是在幾百萬(wàn)年之前發(fā)出的,這樣當(dāng)我們看到宇宙時(shí),我們是在看它的過(guò)去。','如果只用一種方式了解某件事物,他就不會(huì)真正了解它。了解事物真正含義的秘密取決于如何將其與我們所了解的事物相聯(lián)系。']data_new = []for sent in data:data_new.append(cut_word(sent))print(data_new)# 1、實(shí)例化一個(gè)轉(zhuǎn)換器類transfer = TfidfVectorizer()# 2、調(diào)用fit_transformdata_final = transfer.fit_transform(data_new)print("data_final:\n", data_final.toarray())print("特征名字:\n", transfer.get_feature_names())return Noneif __name__ == "__main__":tfidf_demo()#print(cut_word('我愛(ài)北京天安門(mén)')) ['一種 還是 一種 今天 很 殘酷 , 明天 更 殘酷 , 后天 很 美好 , 但 絕對(duì) 大部分 是 死 在 明天 晚上 , 所以 每個(gè) 人 不要 放棄 今天 。', '我們 看到 的 從 很 遠(yuǎn) 星系 來(lái) 的 光是在 幾百萬(wàn)年 之前 發(fā)出 的 , 這樣 當(dāng) 我們 看到 宇宙 時(shí) , 我們 是 在 看 它 的 過(guò)去 。', '如果 只用 一種 方式 了解 某件事 物 , 他 就 不會(huì) 真正 了解 它 。 了解 事物 真正 含義 的 秘密 取決于 如何 將 其 與 我們 所 了解 的 事物 相 聯(lián)系 。'] data_final:[[0.30847454 0. 0.20280347 0. 0. 0.0.40560694 0. 0. 0. 0. 0.0.20280347 0. 0.20280347 0. 0. 0.0. 0.20280347 0.20280347 0. 0.40560694 0.0.20280347 0. 0.40560694 0.20280347 0. 0.0. 0.20280347 0.20280347 0. 0. 0.202803470. ][0. 0. 0. 0.2410822 0. 0.0. 0.2410822 0.2410822 0.2410822 0. 0.0. 0. 0. 0. 0. 0.24108220.55004769 0. 0. 0. 0. 0.24108220. 0. 0. 0. 0.48216441 0.0. 0. 0. 0. 0.2410822 0.0.2410822 ][0.12826533 0.16865349 0. 0. 0.67461397 0.337306980. 0. 0. 0. 0.16865349 0.168653490. 0.16865349 0. 0.16865349 0.16865349 0.0.12826533 0. 0. 0.16865349 0. 0.0. 0.16865349 0. 0. 0. 0.337306980.16865349 0. 0. 0.16865349 0. 0.0. ]] 特征名字:['一種', '不會(huì)', '不要', '之前', '了解', '事物', '今天', '光是在', '幾百萬(wàn)年', '發(fā)出', '取決于', '只用', '后天', '含義', '大部分', '如何', '如果', '宇宙', '我們', '所以', '放棄', '方式', '明天', '星系', '晚上', '某件事', '殘酷', '每個(gè)', '看到', '真正', '秘密', '絕對(duì)', '美好', '聯(lián)系', '過(guò)去', '還是', '這樣']

2.4 特征預(yù)處理

2.4.1 什么是特征預(yù)處理

通過(guò)一些轉(zhuǎn)換函數(shù),將特征數(shù)據(jù)轉(zhuǎn)換成更適合算法模型的特征數(shù)據(jù)的過(guò)程

數(shù)值數(shù)據(jù)的無(wú)量綱化

  • 歸一化
  • 標(biāo)準(zhǔn)化

2 特征預(yù)處理API

sklearn.preprocessing

為什么要進(jìn)行歸一化/標(biāo)準(zhǔn)化?

  • 特征的單位或者大小相差較大,或者某特征的方法相比其他的特征要大出幾個(gè)數(shù)量級(jí),容易影響(支配)目標(biāo)結(jié)果,使得一些算法無(wú)法學(xué)習(xí)到其它的特征

2.4.2 歸一化

1 定義
通過(guò)對(duì)原始的數(shù)據(jù)進(jìn)行變換把數(shù)據(jù)映射到(默認(rèn)為[0,1]之間)

2 公式

3 API
sklearn.preprocessing.MinMaxScaler(feature_range=(0,1)…)
MinMaxScaler.fit_transform(X),X:numpy array格式的數(shù)據(jù)[n_samples,n_features],返回值:轉(zhuǎn)換后的形式相同的array

4 數(shù)據(jù)計(jì)算

import pandas as pd from sklearn.preprocessing import MinMaxScalerdef minmax_demo():"""歸一化:return:"""# 1、獲取數(shù)據(jù)data = pd.read_csv("datingTestSet2.txt", sep='\t')data = data.iloc[:, :3]print("data:\n", data)# 2、實(shí)例化一個(gè)轉(zhuǎn)換器類transform = MinMaxScaler()#transform = MinMaxScaler(feature_range=[2,3])# 3、調(diào)用fit_transformdata_new = transform.fit_transform(data)print("data_new:\n", data_new)return Noneif __name__ == "__main__":minmax_demo()


問(wèn)題:如果有異常值會(huì)有什么影響
異常值:最大值,最小值

5 歸一化總結(jié)
注意最大值最小值是變化的,另外,最大值與最小值非常容易受到異常值影響,
所以這種方法魯棒性較差,只適合傳統(tǒng)精確小數(shù)據(jù)場(chǎng)景

2.4.3 標(biāo)準(zhǔn)化

1 定義
通過(guò)對(duì)原始數(shù)據(jù)進(jìn)行變換把數(shù)據(jù)變換到均值為0,標(biāo)準(zhǔn)差為1的范圍內(nèi)

2 公式

  • 對(duì)于歸一化來(lái)說(shuō):如果出現(xiàn)異常點(diǎn),影響了最大值和最小值,name結(jié)果顯然會(huì)發(fā)生改變
  • 對(duì)于標(biāo)準(zhǔn)化來(lái)說(shuō),如果出現(xiàn)異常點(diǎn),由于具有一定數(shù)據(jù)量,少量的異常點(diǎn)對(duì)于平均值的影響不大,從而方差改變較小

4 代碼
sklearn.perprocessing.StandradScaler()
處理之后,對(duì)每列來(lái)說(shuō),所有數(shù)據(jù)都聚集在均值為0附近,標(biāo)準(zhǔn)差為1
StandardScaler.fit_transform(X),X;numpy array格式的數(shù)據(jù)[n_samples,n_features],返回值:轉(zhuǎn)化后的形狀相同的array

from sklearn.preprocessing import MinMaxScaler, StandardScalerdef stand_demo():"""標(biāo)準(zhǔn)化:return:"""# 1、獲取數(shù)據(jù)data = pd.read_csv("datingTestSet2.txt", sep='\t')data = data.iloc[:, :3]print("data:\n", data)# 2、實(shí)例化一個(gè)轉(zhuǎn)換器類transform = StandardScaler()#transform = StandardScaler(feature_range=[2,3])# 3、調(diào)用fit_transformdata_new = transform.fit_transform(data)print("data_new:\n", data_new)return Noneif __name__ == "__main__":stand_demo()


5 標(biāo)準(zhǔn)化總結(jié)
在已有樣本足夠多的情況下比較穩(wěn)定,適合現(xiàn)代嘈雜大數(shù)據(jù)場(chǎng)景

2.5 特征降維

2.5.1 降維

降維是指在某些限定條件下,降低隨機(jī)變量(特征)個(gè)數(shù),得到一組“不相關(guān)”主變量的過(guò)程

2.5.2 降維的兩種方式

  • 特征選擇
  • 主成分分析(可以理解一種特征提取的方式)

2.5.3 什么是特征選擇

1 定義
數(shù)據(jù)中包含冗余或相關(guān)變量(或稱特征、屬性、指標(biāo)等),旨在從原有特征中找出主要特征

2 方法
Filter過(guò)濾式:主要探究特征本身特點(diǎn)、特征與特征和目標(biāo)值之間關(guān)聯(lián)

  • (1)方差選擇法:低方差特征過(guò)濾
  • (2)相關(guān)系數(shù):特征與特征之間的相關(guān)程度

Embedded嵌入式:算法自動(dòng)選擇特征(特征與目標(biāo)值之間的關(guān)聯(lián))

  • (1)決策樹(shù):信息熵、信息增益
  • (2)正則化:L1,L2
  • (3)深度學(xué)習(xí):卷積等

3 模塊

sklearn.feature_selection

4 過(guò)濾式
4.1 低方差特征過(guò)濾
刪除低方差的一些特征

  • 特征方差小:某個(gè)特征大多樣本的值比較相近
  • 特征方差大:某個(gè)特征很多樣本的值都有差別

4.1.1 API
sklearn.feature_selection.VArianceThreshold(threshold=0.0)
刪除所有低方差特征
Variance.fit_transform(X),X:numpy array格式的數(shù)據(jù)[m_sample,n_features],返回值:訓(xùn)練集差異低于threadshold的特征將被刪除。默認(rèn)值是保留非零方差特征,即刪除所有樣本中具有相同值的特征

4.1.2 數(shù)據(jù)計(jì)算

from sklearn.feature_selection import VarianceThresholddef variance_demo():"""低方差特征過(guò)濾:return:"""# 1、獲取數(shù)據(jù)data = pd.read_csv('factor_returns.csv')print('data:\n', data)data = data.iloc[:,1:-2]print('data:\n', data)# 2、實(shí)例化一個(gè)轉(zhuǎn)換器類#transform = VarianceThreshold()transform = VarianceThreshold(threshold=10)# 3、調(diào)用fit_transformdata_new = transform.fit_transform(data)print("data_new\n", data_new, data_new.shape)return Noneif __name__ == "__main__":variance_demo()

4.2 相關(guān)系數(shù)
皮爾遜相關(guān)系數(shù)(Pearson Correlation Coefficient):反映變量之間相關(guān)關(guān)系密切程度的統(tǒng)計(jì)指標(biāo)

公式:

計(jì)算過(guò)程

4.2.3 特點(diǎn)
相關(guān)系數(shù)的值介于-1與+1之間,即-1<=r<=+1。其性質(zhì)如下:

  • 當(dāng)r>0時(shí),表示兩變量正相關(guān);r<0時(shí),兩變量為負(fù)相關(guān)
  • 當(dāng)|r|=1時(shí),表示兩變量為完全相關(guān);當(dāng)r=0時(shí),表示兩變量間無(wú)相關(guān)關(guān)系
  • 當(dāng)0<|r|<1時(shí),表示兩變量存在一定程度的相關(guān)。且|r|越接近1,兩變量間線性關(guān)系越密切;|r|越接近0,表示兩變量的線性相關(guān)越弱
  • 一般可按三級(jí)劃分:|r|<0.4為低度相關(guān);0.4<=|r|<0.7為顯著相關(guān);0.7<=|r|<1為高維線性相關(guān)

4.2.4 API

from scipy.stats import pearsonr
  • x:(N.)array_like
  • y:(N.)array_like Returns:(Perason’s correlation coefficient, p-value)
from sklearn.feature_selection import VarianceThreshold from scipy.stats import pearsonrdef variance_demo():"""低方差特征過(guò)濾:return:"""# 1、獲取數(shù)據(jù)data = pd.read_csv('factor_returns.csv')print('data:\n', data)data = data.iloc[:,1:-2]print('data:\n', data)# 2、實(shí)例化一個(gè)轉(zhuǎn)換器類#transform = VarianceThreshold()transform = VarianceThreshold(threshold=10)# 3、調(diào)用fit_transformdata_new = transform.fit_transform(data)print("data_new\n", data_new, data_new.shape)# 計(jì)算兩個(gè)變量之間的相關(guān)系數(shù)r = pearsonr(data["pe_ratio"],data["pb_ratio"])print("相關(guān)系數(shù):\n", r)return Noneif __name__ == "__main__":variance_demo()

相關(guān)系數(shù)看前面那個(gè)

如果特征與特征相關(guān)性很高:
1)選取其中一個(gè)
2)加權(quán)求和
3)主成分分析

2.6 主成分分析

2.6.1 什么是主成分分析(PCA)

定義:高維數(shù)據(jù)轉(zhuǎn)換為低維數(shù)據(jù)的過(guò)程,在此過(guò)程中可能會(huì)舍棄原有數(shù)據(jù)、創(chuàng)造新的變量
作用:是數(shù)據(jù)維數(shù)的壓縮,盡可能降低原數(shù)據(jù)的維數(shù)(復(fù)雜度),損失少量信息
應(yīng)用:回歸分析或者聚類分析中

1 計(jì)算案例理解
二維降到一維

2 代碼
sklearn.decomposition.PCA(n_components=None)

  • 將數(shù)據(jù)分解為較低維度空間
  • n_components:
    • 小數(shù):表示保留百分之多少的信息
    • 整數(shù):減少到多少特征
      PCA.fit_transform(X),X:numpy array格式的數(shù)據(jù)[N_samples, n_features],返回值:轉(zhuǎn)換后指定維度的array

3 數(shù)據(jù)計(jì)算

from sklearn.decomposition import PCAdef pca_demo():"""PCA降維:return:"""data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]# 1、實(shí)例化一個(gè)轉(zhuǎn)換器類transform = PCA(n_components=2) # 4個(gè)特征降到2個(gè)特征# 2、調(diào)用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 案例:探究用戶對(duì)物品類別的喜好細(xì)分降維

數(shù)據(jù):
1)order_prodects_prior.csv:訂單與商品信息

    • 字段:order_id, product_id, add_to_cart_order, reordered
      2)products.csv:商品信息
    • 字段:product_id, product_name, aisle_id, department_id
      3)order.csv:用戶的訂單信息
    • 字段:order_id, user_id, eval_set, order_number, …
      4)aisles.csv:商品所屬具體物品類別
    • 字段:aisle_id, aisle

處理成這個(gè)樣子

需求
1)需要將user_id和aisle放在同一個(gè)表中—合并
2)找到user_id和aisle----交叉表和透視表

# 1、獲取數(shù)據(jù) # 2、合并表 # 3、找到suer_id和aisle之間的關(guān)系 # 4、PAC降維 import pandas as pd # 1、獲取數(shù)據(jù) order_products = pd.read_csv('./instacart/order_products__prior.csv') #32434489× 4 products = pd.read_csv('./instacart/products.csv') # (49688,4) orders = pd.read_csv('./instacart/orders.csv') #3421083 rows × 7 columns aisles = pd.read_csv('./instacart/aisles.csv') #(134,2) # 2、合并表' ? # 合并aisles和products tab1 = pd.merge(aisles, products, on=["aisle_id", "aisle_id"]) #49688 × 5 c tab2 = pd.merge(tab1, order_products, on=["product_id", "product_id"])#32434489 ,8 tab3 = pd.merge(tab2, orders, on=["order_id", "order_id"])#32434489 ,14 # tab3.head() # 3、找到suer_id和aisle之間的關(guān)系 table = pd.crosstab(tab3["user_id"], tab3["aisle"]) #206209 rows × 134 columns data = table[:10000] #10000 rows × 134 columns# 4、PAC降維 from sklearn.decomposition import PCA # 1)實(shí)例化一個(gè)轉(zhuǎn)換器類 transfer = PCA(n_components=0.95) # 保留95%的信息 # 2)調(diào)用fit_transform data_new = transfer.fit_transform(data) #(10000, 42),由134個(gè)特征降維到42個(gè)

2.7 機(jī)器學(xué)習(xí)第一天總結(jié)

總結(jié)

以上是生活随笔為你收集整理的黑马程序员---三天快速入门Python机器学习(第一天)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。