特征工程總結


目錄

1 特征工程是什么?
2 數據預處理
  2.1 無量綱化
    2.1.1 標準化
    2.1.2 區間縮放法
    2.1.3 標準化與歸一化的區別
  2.2 對定量特征二值化
  2.3 對定性特征啞編碼
  2.4 缺失值計算
  2.5 數據變換
3 特征選擇
  3.1 Filter
    3.1.1 方差選擇法
    3.1.2 相關系數法
    3.1.3 卡方檢驗
    3.1.4 互信息法
  3.2 Wrapper
    3.2.1 遞歸特征消除法
  3.3 Embedded
    3.3.1 基于懲罰項的特征選擇法
    3.3.2 基于樹模型的特征選擇法
4 降維
  4.1 主成分分析法(PCA)
  4.2 線性判別分析法(LDA)
5 總結
6 參考資料


1 特征工程是什么?

  有這么一句話在業界廣泛流傳:數據和特征決定了機器學習的上限,而模型和算法只是逼近這個上限而已。那特征工程到底是什么呢?顧名思義,其本質是一項工程活動,目的是最大限度地從原始數據中提取特征以供算法和模型使用。通過總結和歸納,人們認為特征工程包括以下方面:

<img src="https://pic3.zhimg.com/20e4522e6104ad71fc543cc21f402b36_b.png" data-rawwidth="875" data-rawheight="967" class="origin_image zh-lightbox-thumb" width="875" data-original="https://pic3.zhimg.com/20e4522e6104ad71fc543cc21f402b36_r.png">

  特征處理是特征工程的核心部分,sklearn提供了較為完整的特征處理方法,包括數據預處理,特征選擇,降維等。首次接觸到sklearn,通常會被其豐富且方便的算法模型庫吸引,但是這里介紹的特征處理庫也十分強大!

  本文中使用sklearn中的IRIS(鳶尾花)數據集來對特征處理功能進行說明。IRIS數據集由Fisher在1936年整理,包含4個特征(Sepal.Length(花萼長度)、Sepal.Width(花萼寬度)、Petal.Length(花瓣長度)、Petal.Width(花瓣寬度)),特征值都為正浮點數,單位為厘米。目標值為鳶尾花的分類(Iris Setosa(山鳶尾)、Iris Versicolour(雜色鳶尾),Iris Virginica(維吉尼亞鳶尾))。導入IRIS數據集的代碼如下:

  1. from sklearn.datasets import load_iris
  2. #導入IRIS數據集
  3. iris = load_iris()
  4. #特征矩陣
  5. iris.data
  6. #目標向量
  7. iris.target

2 數據預處理

  通過特征提取,我們能得到未經處理的特征,這時的特征可能有以下問題:

  • 不屬于同一量綱:即特征的規格不一樣,不能夠放在一起比較。無量綱化可以解決這一問題。
  • 信息冗余:對于某些定量特征,其包含的有效信息為區間劃分,例如學習成績,假若只關心“及格”或不“及格”,那么需要將定量的考分,轉換成“1”和“0”表示及格和未及格。二值化可以解決這一問題。
  • 定性特征不能直接使用:某些機器學習算法和模型只能接受定量特征的輸入,那么需要將定性特征轉換為定量特征。最簡單的方式是為每一種定性值指定一個定量值,但是這種方式過于靈活,增加了調參的工作。通常使用啞編碼的方式將定性特征轉換為定量特征:假設有N種定性值,則將這一個特征擴展為N種特征,當原始特征值為第i種定性值時,第i個擴展特征賦值為1,其他擴展特征賦值為0。啞編碼的方式相比直接指定的方式,不用增加調參的工作,對于線性模型來說,使用啞編碼后的特征可達到非線性的效果。
  • 存在缺失值:缺失值需要補充。
  • 信息利用率低:不同的機器學習算法和模型對數據中信息的利用是不同的,之前提到在線性模型中,使用對定性特征啞編碼可以達到非線性的效果。類似地,對定量變量多項式化,或者進行其他的轉換,都能達到非線性的效果。

  我們使用sklearn中的preproccessing庫來進行數據預處理,可以覆蓋以上問題的解決方案。

2.1 無量綱化

  無量綱化使不同規格的數據轉換到同一規格。常見的無量綱化方法有標準化和區間縮放法。標準化的前提是特征值服從正態分布,標準化后,其轉換成標準正態分布。區間縮放法利用了邊界值信息,將特征的取值區間縮放到某個特點的范圍,例如[0, 1]等。

2.1.1 標準化

  標準化需要計算特征的均值和標準差,公式表達為:

  使用preproccessing庫的StandardScaler類對數據進行標準化的代碼如下:

<img src="https://pic2.zhimg.com/c7e852db6bd05b7bb1017b5425ffeec1_b.png" data-rawwidth="81" data-rawheight="48" class="content_image" width="81">
  1. from sklearn.preprocessing import StandardScaler
  2. #標準化,返回值為標準化后的數據
  3. StandardScaler().fit_transform(iris.data)
2.1.2 區間縮放法

  區間縮放法的思路有多種,常見的一種為利用兩個最值進行縮放,公式表達為:

  使用preproccessing庫的MinMaxScaler類對數據進行區間縮放的代碼如下:

<img src="https://pic2.zhimg.com/0f119a8e8f69509c5b95ef6a8a01a809_b.png" data-rawwidth="119" data-rawheight="52" class="content_image" width="119">
from sklearn.preprocessing import MinMaxScaler

#區間縮放,返回值為縮放到[0, 1]區間的數據
MinMaxScaler().fit_transform(iris.data)

2.1.3 標準化與歸一化的區別

  簡單來說,標準化是依照特征矩陣的列處理數據,其通過求z-score的方法,將樣本的特征值轉換到同一量綱下。歸一化是依照特征矩陣的行處理數據,其目的在于樣本向量在點乘運算或其他核函數計算相似性時,擁有統一的標準,也就是說都轉化為“單位向量”。規則為l2的歸一化公式如下:

<img src="https://pic1.zhimg.com/fbb2fd0a163f2fa211829b735194baac_b.png" data-rawwidth="113" data-rawheight="57" class="content_image" width="113">

  使用preproccessing庫的Normalizer類對數據進行歸一化的代碼如下:

  1. from sklearn.preprocessing import Normalizer
  2. #歸一化,返回值為歸一化后的數據
  3. Normalizer().fit_transform(iris.data)
2.2 對定量特征二值化

  定量特征二值化的核心在于設定一個閾值,大于閾值的賦值為1,小于等于閾值的賦值為0,公式表達如下:

<img src="https://pic2.zhimg.com/11111244c5b69c1af6c034496a2591ad_b.png" data-rawwidth="159" data-rawheight="41" class="content_image" width="159">

  使用preproccessing庫的Binarizer類對數據進行二值化的代碼如下:

  1. from sklearn.preprocessing import Binarizer
  2. #二值化,閾值設置為3,返回值為二值化后的數據
  3. Binarizer(threshold=3).fit_transform(iris.data)
2.3 對定性特征啞編碼

  由于IRIS數據集的特征皆為定量特征,故使用其目標值進行啞編碼(實際上是不需要的)。使用preproccessing庫的OneHotEncoder類對數據進行啞編碼的代碼如下:

  1. from sklearn.preprocessing import OneHotEncoder
  2. #啞編碼,對IRIS數據集的目標值,返回值為啞編碼后的數據
  3. OneHotEncoder().fit_transform(iris.target.reshape((-1,1)))
2.4 缺失值計算

  由于IRIS數據集沒有缺失值,故對數據集新增一個樣本,4個特征均賦值為NaN,表示數據缺失。使用preproccessing庫的Imputer類對數據進行缺失值計算的代碼如下:

  1. from numpy import vstack, array, nan
  2. from sklearn.preprocessing import Imputer
  3. #缺失值計算,返回值為計算缺失值后的數據
  4. #參數missing_value為缺失值的表示形式,默認為NaN
  5. #參數strategy為缺失值填充方式,默認為mean(均值)
  6. Imputer().fit_transform(vstack((array([nan, nan, nan, nan]), iris.data)))
2.5 數據變換

  常見的數據變換有基于多項式的、基于指數函數的、基于對數函數的。4個特征,度為2的多項式轉換公式如下:

<img src="https://pic4.zhimg.com/d1c57a66fad39df90b87cea330efb3f3_b.png" data-rawwidth="571" data-rawheight="57" class="origin_image zh-lightbox-thumb" width="571" data-original="https://pic4.zhimg.com/d1c57a66fad39df90b87cea330efb3f3_r.png">

  使用preproccessing庫的PolynomialFeatures類對數據進行多項式轉換的代碼如下:

  1. from sklearn.preprocessing import PolynomialFeatures
  2. #多項式轉換
  3. #參數degree為度,默認值為2
  4. PolynomialFeatures().fit_transform(iris.data)

  基于單變元函數的數據變換可以使用一個統一的方式完成,使用preproccessing庫的FunctionTransformer對數據進行對數函數轉換的代碼如下:

  1. from numpy import log1p
  2. from sklearn.preprocessing import FunctionTransformer
  3. #自定義轉換函數為對數函數的數據變換
  4. #第一個參數是單變元函數
  5. FunctionTransformer(log1p).fit_transform(iris.data)

3 特征選擇

  當數據預處理完成后,我們需要選擇有意義的特征輸入機器學習的算法和模型進行訓練。通常來說,從兩個方面考慮來選擇特征:

  • 特征是否發散:如果一個特征不發散,例如方差接近于0,也就是說樣本在這個特征上基本上沒有差異,這個特征對于樣本的區分并沒有什么用。
  • 特征與目標的相關性:這點比較顯見,與目標相關性高的特征,應當優選選擇。除方差法外,本文介紹的其他方法均從相關性考慮。

  根據特征選擇的形式又可以將特征選擇方法分為3種:

  • Filter:過濾法,按照發散性或者相關性對各個特征進行評分,設定閾值或者待選擇閾值的個數,選擇特征。
  • Wrapper:包裝法,根據目標函數(通常是預測效果評分),每次選擇若干特征,或者排除若干特征。
  • Embedded:嵌入法,先使用某些機器學習的算法和模型進行訓練,得到各個特征的權值系數,根據系數從大到小選擇特征。類似于Filter方法,但是是通過訓練來確定特征的優劣。

  我們使用sklearn中的feature_selection庫來進行特征選擇。

3.1 Filter
3.1.1 方差選擇法

  使用方差選擇法,先要計算各個特征的方差,然后根據閾值,選擇方差大于閾值的特征。使用feature_selection庫的VarianceThreshold類來選擇特征的代碼如下:

  1. from sklearn.feature_selection import VarianceThreshold
  2. #方差選擇法,返回值為特征選擇后的數據
  3. #參數threshold為方差的閾值
  4. VarianceThreshold(threshold=3).fit_transform(iris.data)
3.1.2 相關系數法

  使用相關系數法,先要計算各個特征對目標值的相關系數以及相關系數的P值。用feature_selection庫的SelectKBest類結合相關系數來選擇特征的代碼如下:

  1. from sklearn.feature_selection import SelectKBest
  2. from scipy.stats import pearsonr
  3. #選擇K個最好的特征,返回選擇特征后的數據
  4. #第一個參數為計算評估特征是否好的函數,該函數輸入特征矩陣和目標向量,輸出二元組(評分,P值)的數組,數組第i項為第i個特征的評分和P值。在此定義為計算相關系數
  5. #參數k為選擇的特征個數
  6. SelectKBest(lambda X, Y: array(map(lambda x:pearsonr(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)
3.1.3 卡方檢驗

  經典的卡方檢驗是檢驗定性自變量對定性因變量的相關性。假設自變量有N種取值,因變量有M種取值,考慮自變量等于i且因變量等于j的樣本頻數的觀察值與期望的差距,構建統計量:

<img src="https://pic1.zhimg.com/7bc586c806b9b8bf1e74433a2e1976bc_b.png" data-rawwidth="162" data-rawheight="48" class="content_image" width="162">

  不難發現,這個統計量的含義簡而言之就是自變量對因變量的相關性。用feature_selection庫的SelectKBest類結合卡方檢驗來選擇特征的代碼如下:

  1. from sklearn.feature_selection import SelectKBest
  2. from sklearn.feature_selection import chi2
  3. #選擇K個最好的特征,返回選擇特征后的數據
  4. SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)
3.1.4 互信息法

  經典的互信息也是評價定性自變量對定性因變量的相關性的,互信息計算公式如下:

<img src="https://pic3.zhimg.com/6af9a077b49f587a5d149f5dc51073ba_b.png" data-rawwidth="274" data-rawheight="50" class="content_image" width="274">

  為了處理定量數據,最大信息系數法被提出,使用feature_selection庫的SelectKBest類結合最大信息系數法來選擇特征的代碼如下:

  1. from sklearn.feature_selection import SelectKBest
  2. from minepy import MINE
  3. #由于MINE的設計不是函數式的,定義mic方法將其為函數式的,返回一個二元組,二元組的第2項設置成固定的P值0.5
  4. def mic(x, y):
  5. m = MINE()
  6. m.compute_score(x, y)
  7. return (m.mic(), 0.5)
  8. #選擇K個最好的特征,返回特征選擇后的數據
  9. SelectKBest(lambda X, Y: array(map(lambda x:mic(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)
3.2 Wrapper
3.2.1 遞歸特征消除法

  遞歸消除特征法使用一個基模型來進行多輪訓練,每輪訓練后,消除若干權值系數的特征,再基于新的特征集進行下一輪訓練。使用feature_selection庫的RFE類來選擇特征的代碼如下:

  1. from sklearn.feature_selection import RFE
  2. from sklearn.linear_model import LogisticRegression
  3. #遞歸特征消除法,返回特征選擇后的數據
  4. #參數estimator為基模型
  5. #參數n_features_to_select為選擇的特征個數
  6. RFE(estimator=LogisticRegression(), n_features_to_select=2).fit_transform(iris.data, iris.target)
3.3 Embedded
3.3.1 基于懲罰項的特征選擇法

  使用帶懲罰項的基模型,除了篩選出特征外,同時也進行了降維。使用feature_selection庫的SelectFromModel類結合帶L1懲罰項的邏輯回歸模型,來選擇特征的代碼如下:

  1. from sklearn.feature_selection import SelectFromModel
  2. from sklearn.linear_model import LogisticRegression
  3. #帶L1懲罰項的邏輯回歸作為基模型的特征選擇
  4. SelectFromModel(LogisticRegression(penalty="l1", C=0.1)).fit_transform(iris.data, iris.target)

  實際上,L1懲罰項降維的原理在于保留多個對目標值具有同等相關性的特征中的一個,所以沒選到的特征不代表不重要。故,可結合L2懲罰項來優化。具體操作為:若一個特征在L1中的權值為1,選擇在L2中權值差別不大且在L1中權值為0的特征構成同類集合,將這一集合中的特征平分L1中的權值,故需要構建一個新的邏輯回歸模型:

  1. from sklearn.linear_model import LogisticRegression
  2. class LR(LogisticRegression):
  3. def __init__(self, threshold=0.01, dual=False, tol=1e-4, C=1.0,
  4. fit_intercept=True, intercept_scaling=1, class_weight=None,
  5. random_state=None, solver='liblinear', max_iter=100,
  6. multi_class='ovr', verbose=0, warm_start=False, n_jobs=1):
  7. #權值相近的閾值
  8. self.threshold = threshold
  9. LogisticRegression.__init__(self, penalty='l1', dual=dual, tol=tol, C=C,
  10. fit_intercept=fit_intercept, intercept_scaling=intercept_scaling, class_weight=class_weight,
  11. random_state=random_state, solver=solver, max_iter=max_iter,
  12. multi_class=multi_class, verbose=verbose, warm_start=warm_start, n_jobs=n_jobs)
  13. #使用同樣的參數創建L2邏輯回歸
  14. self.l2 = LogisticRegression(penalty='l2', dual=dual, tol=tol, C=C, fit_intercept=fit_intercept, intercept_scaling=intercept_scaling, class_weight = class_weight, random_state=random_state, solver=solver, max_iter=max_iter, multi_class=multi_class, verbose=verbose, warm_start=warm_start, n_jobs=n_jobs)
  15. def fit(self, X, y, sample_weight=None):
  16. #訓練L1邏輯回歸
  17. super(LR, self).fit(X, y, sample_weight=sample_weight)
  18. self.coef_old_ = self.coef_.copy()
  19. #訓練L2邏輯回歸
  20. self.l2.fit(X, y, sample_weight=sample_weight)
  21. cntOfRow, cntOfCol = self.coef_.shape
  22. #權值系數矩陣的行數對應目標值的種類數目
  23. for i in range(cntOfRow):
  24. for j in range(cntOfCol):
  25. coef = self.coef_[i][j]
  26. #L1邏輯回歸的權值系數不為0
  27. if coef != 0:
  28. idx = [j]
  29. #對應在L2邏輯回歸中的權值系數
  30. coef1 = self.l2.coef_[i][j]
  31. for k in range(cntOfCol):
  32. coef2 = self.l2.coef_[i][k]
  33. #在L2邏輯回歸中,權值系數之差小于設定的閾值,且在L1中對應的權值為0
  34. if abs(coef1-coef2) < self.threshold and j != k and self.coef_[i][k] == 0:
  35. idx.append(k)
  36. #計算這一類特征的權值系數均值
  37. mean = coef / len(idx)
  38. self.coef_[i][idx] = mean
  39. return self

  使用feature_selection庫的SelectFromModel類結合帶L1以及L2懲罰項的邏輯回歸模型,來選擇特征的代碼如下:

  1. from sklearn.feature_selection import SelectFromModel
  2. #帶L1和L2懲罰項的邏輯回歸作為基模型的特征選擇
  3. #參數threshold為權值系數之差的閾值
  4. SelectFromModel(LR(threshold=0.5, C=0.1)).fit_transform(iris.data, iris.target)
3.3.2 基于樹模型的特征選擇法

  樹模型中GBDT也可用來作為基模型進行特征選擇,使用feature_selection庫的SelectFromModel類結合GBDT模型,來選擇特征的代碼如下:

  1. from sklearn.feature_selection import SelectFromModel
  2. from sklearn.ensemble import GradientBoostingClassifier
  3. #GBDT作為基模型的特征選擇
  4. SelectFromModel(GradientBoostingClassifier()).fit_transform(iris.data, iris.target)

4 降維

  當特征選擇完成后,可以直接訓練模型了,但是可能由于特征矩陣過大,導致計算量大,訓練時間長的問題,因此降低特征矩陣維度也是必不可少的。常見的降維方法除了以上提到的基于L1懲罰項的模型以外,另外還有主成分分析法(PCA)和線性判別分析(LDA),線性判別分析本身也是一個分類模型。PCA和LDA有很多的相似點,其本質是要將原始的樣本映射到維度更低的樣本空間中,但是PCA和LDA的映射目標不一樣:PCA是為了讓映射后的樣本具有最大的發散性;而LDA是為了讓映射后的樣本有最好的分類性能。所以說PCA是一種無監督的降維方法,而LDA是一種有監督的降維方法。

4.1 主成分分析法(PCA)

  使用decomposition庫的PCA類選擇特征的代碼如下:

  1. from sklearn.decomposition import PCA
  2. #主成分分析法,返回降維后的數據
  3. #參數n_components為主成分數目
  4. PCA(n_components=2).fit_transform(iris.data)
4.2 線性判別分析法(LDA)

  使用lda庫的LDA類選擇特征的代碼如下:

  1. from sklearn.lda import LDA
  2. #線性判別分析法,返回降維后的數據
  3. #參數n_components為降維后的維數
  4. LDA(n_components=2).fit_transform(iris.data, iris.target)


5 總結

  再讓我們回歸一下本文開始的特征工程的思維導圖,我們可以使用sklearn完成幾乎所有特征處理的工作,而且不管是數據預處理,還是特征選擇,抑或降維,它們都是通過某個類的方法fit_transform完成的,fit_transform要不只帶一個參數:特征矩陣,要不帶兩個參數:特征矩陣加目標向量。這些難道都是巧合嗎?還是故意設計成這樣?方法fit_transform中有fit這一單詞,它和訓練模型的fit方法有關聯嗎?接下來,我將在《使用sklearn優雅地進行數據挖掘》中闡述其中的奧妙!



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445224.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445224.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445224.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Jmeter測試并發https請求成功了

Jmeter2.4 如何測試多個并發https請求&#xff0c;終于成功了借此機會分享給大家 首先要安裝jmeter2.4版本的&#xff0c;而且不建議大家使用badboy&#xff0c;因為這存在兼容性問題。對于安裝&#xff0c;我就不講了&#xff0c;我就說說如何測試https&#xff0c;想必大家都…

關系數據庫——sql基礎1定義

關系數據庫標準語言SQL 基本概念 SQL語言是一個功能極強的關系數據庫語言。同時也是一種介于關系代數與關系演算之間的結構化查詢語言&#xff08;Structured Query Language&#xff09;&#xff0c;其功能包括數據定義、數據查詢、數據操縱和數據控制。 SQL的特點&#xff…

libcurl編程

一、curl簡介 curl是一個利用URL語法在命令行方式下工作的文件傳輸工具。它支持的協議有&#xff1a;FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。curl同樣支持HTTPS認證&#xff0c;HTTP POST方法, HTTP PUT方法, FTP上傳, kerberos認證, HTTP上傳, 代理服…

大數據學習(09)--Hadoop2.0介紹

文章目錄目錄1.Hadoop的發展與優化1.1 Hadoop1.0 的不足與局限1.2 Hadoop2.0 的改進與提升2.HDFS2.0 的新特性2.1 HDFS HA2.2 HDFS Federation3. 新一代的資源管理器YARN3.1 MapReduce1.0 缺陷3.2 YARN的設計思路3.3 YARN 體系結構3.4 YARN工作流程3.5 YARN框架與MapReduce1.0框…

Java多線程常用方法

start()與run() start() 啟動線程并執行相應的run()方法 run() 子線程要執行的代碼放入run()方法 getName()和setName() getName() 獲取此線程的名字 setName() 設置此線程的名字 isAlive() 是判斷當前線程是否處于活動狀態。活動狀態就是已經啟動尚未終止。 curren…

MachineLearning(2)-圖像分類常用數據集

圖像分類常用數據集1 CIFAR-102.MNIST3.STL_104.Imagenet5.L-Sun6.caltech-101在訓練神經網絡進行圖像識別分類時&#xff0c;常會用到一些通用的數據集合。利用這些數據集合可以對比不同模型的性能差異。下文整理常用的圖片數據集合&#xff08;持續更新中)。基本信息對比表格…

Linux網絡編程實例詳解

本文介紹了在Linux環境下的socket編程常用函數用法及socket編程的一般規則和客戶/服務器模型的編程應注意的事項和常遇問題的解決方法&#xff0c;并舉了具體代 碼實例。要理解本文所談的技術問題需要讀者具有一定C語言的編程經驗和TCP/IP方面的基本知識。要實習本文的示例&…

python的命令解析getopt.getopt()函數分析

【轉自http://hi.baidu.com/javalang/blog/category/Python】 可以參考http://docs.python.org/lib/module-getopt.html # -*- coding: cp936 -*-import getoptimport sysdef usage():print Help Information:-h: Show help information-xValue:...if __name____main__:#set d…

博弈論基礎

博弈論總結 什么是博弈論&#xff1a; 多人進行博弈&#xff0c;假設每個人都采取最優策略&#xff0c;一定有一個人勝出&#xff0c;在知道初態及規則的情況下&#xff0c;求解出 何人勝出的一類問題的理論及方法。 博弈論的一些性質 P點&#xff1a;必敗點&#xff0c;N…

矩陣論-范數理論及其應用

范數理論及其應用2.1向量范數及其性質2.2矩陣范數本系列博文主要總結學習矩陣論的心得筆記&#xff0c;參考數目《矩陣論》–張凱院&#xff1b;整個文章的整理體系參照行書過程。范數–非負實數&#xff0c;用于衡量線性空間元素&#xff08;如&#xff1a;向量&#xff0c;矩…

大數據學習(09)--spark學習

文章目錄目錄1.spark介紹1.1 spark介紹1.2 scale介紹1.3 spark和Hadoop比較2.spark生態系統3.spark運行框架3.1 基本概念3.2 架構的設計3.3 spark運行基本流程3.4 spark運行原理3.5 RDD運行原理3.5.1 設計背景3.5.2 RDD概念和特性3.5.3 RDD之間的依賴關系3.5.4 stage的劃分3.5.…

探索 Pexpect

概述 通過本系列第一部分 《探索 Pexpect&#xff0c;第 1 部分&#xff1a;剖析 Pexpect 》&#xff08;請參閱參考資料&#xff09;的介紹&#xff0c;相信大家已經對 Pexpect 的用法已經有了比較全面的了解&#xff0c;知道 Pexpect 是個純 Python 語言實現的模塊&#xff…

Python的Pexpect詳解 [圖片]

Pexpect 是一個用來啟動子程序并對其進行自動控制的純 Python 模塊。 Pexpect 可以用來和像 ssh、ftp、passwd、telnet 等命令行程序進行自動交互。繼第一部分《探索 Pexpect&#xff0c;第 1 部分&#xff1a;剖析 Pexpect 》介紹了 Pexpect 的基礎和如何使用后&#xff0c;本…

關系數據庫——sql增刪改

數據的插入 插入元祖 --1. 表名后沒有指定屬性列&#xff1a;表示要插入的是一條完整的元組&#xff0c;且屬性列屬性與表定義中的順序一致 insert into student values (201215128, 陳東, 18, 男, IS);--2. 在表明后指定要插入數據的表名及屬性列&#xff0c;屬性列的順序可…

機器學習中的聚類方法總結

聚類定義 定義 聚類就是對大量未知標注 的數據集&#xff0c;按數據 的內在相似性將數據集劃分為多個類別&#xff0c;使 類別內的數據相似度較大而類別間的數據相 似度較小。是無監督的分類方式。 聚類思想 給定一個有N個對象的數據集&#xff0c;構造數據的k 個簇&#x…

學點數學(1)-隨機變量函數變換

隨機變量函數變換本文介紹一維隨機變量函數變換&#xff0c;參考文獻&#xff1a;https://wenku.baidu.com/view/619f74ac3186bceb19e8bbd0.html變換TTT作用于隨機變量XXX&#xff0c;產生隨機變量YYY. T:X?>Y或者寫為yT(x)T:X->Y 或者寫為 yT(x)T:X?>Y或者寫為yT(x…

關系數據庫——關系數據語言

關系 域&#xff1a;一組具有相同數據類型的值的集合&#xff08;即取值范圍&#xff09; 笛卡爾積&#xff1a;域上的一種集合運算。結果為一個集合&#xff0c;集合的每一個元素是一個元組&#xff0c;元組的每一個分量來自不同的域。 基數&#xff1a;一個域允許的不同取值…

Python模塊(2)-Numpy 簡易使用教程

Numpy模塊 簡易使用教程1.數組創建2.數組基本屬性-維度、尺寸、數據類型3.數組訪問-索引、切片、迭代4.數組的算術運算-加減乘除、轉置求逆、極大極小5.通用函數-sin,cos,exp,sqrtnp.dot與np.matmul的區別6.數組的合并和分割6.1 np.vstack(),np.hstack()6.2 np.stack()7.list與…

機器學習問題總結(01)

文章目錄1.請描述推薦系統中協同過濾算法CF的原理2.請描述決策樹的原理、過程、終止條件&#xff0c;以及如何防止過擬合2.1決策樹生成算法2.2 剪枝處理&#xff08;防止過擬合&#xff09;2.3 停止條件2.4 棵決策樹的生成過程2.5 決策樹的損失函數3.請描述K-means的原理&#…

pthread_attr_init線程屬性

1&#xff0e;線程屬性 線程具有屬性&#xff0c;用pthread_attr_t表示&#xff0c;在對該結構進行處理之前必須進行初始化&#xff0c;在使用后需要對其去除初始化。我們用pthread_attr_init函數對其初始化&#xff0c;用pthread_attr_destroy對其去除初始化。 1&#xff0e; …