python?數(shù)據(jù)挖掘算法的過程詳解
1、首先簡述數(shù)據(jù)挖掘的過程
第一步:數(shù)據(jù)選擇
可以通過業(yè)務原始數(shù)據(jù)、公開的數(shù)據(jù)集、也可通過爬蟲的方式獲取。
第二步: 數(shù)據(jù)預處理
數(shù)據(jù)極可能有噪音,不完整等缺陷,需要對數(shù)據(jù)進行數(shù)據(jù)標準化,方法有min-max 標準化,z-score 標準化,修正的標準z-score。
第三步:特征值數(shù)據(jù)轉(zhuǎn)換
將數(shù)據(jù)提取特征使這些數(shù)據(jù)符合特定數(shù)據(jù)挖掘算法的分析模型。數(shù)據(jù)模型有很多,等下詳細講解。
第四步:模型訓練
選擇好的數(shù)據(jù)挖掘算法對數(shù)據(jù)進行訓練
第五步:測試模型+效果評估
有兩種主流方法:
十折交叉驗證:將數(shù)據(jù)集隨機分割成十個等份,每次用9份數(shù)據(jù)做訓練集,1份數(shù)據(jù)做測試集,如此迭代10次。十折交叉驗證的關鍵在于較平均地分為10份。
N折交叉驗證又稱為留一法:用幾乎所有的數(shù)據(jù)進行訓練,然后留一個數(shù)據(jù)進行測試,并迭代每一數(shù)據(jù)測試。留一法的優(yōu)點是:確定性。
第六步:模型使用
使用訓練好的模型對數(shù)據(jù)進行預測。
第七步:解釋與評價
對數(shù)據(jù)挖掘后的信息加以分析解釋,并應用于實際的工作領域。
2、主要的算法模型講解 ——基于sklearn
1)線性回歸:希望所有點都落在直線上,所有點離直線的距離最近。首先假設好y=ax+b中a和b的值,然后計算每個數(shù)據(jù)點到這條直線上的距離總和,目的是要使這個總和最?。?/p>
from sklearn.linear_model import LinearRegression # 定義線性回歸模型 model = LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1) """ 參數(shù) --- fit_intercept:是否計算截距。False-模型沒有截距 normalize: 當fit_intercept設置為False時,該參數(shù)將被忽略。 如果為真,則回歸前的回歸系數(shù)X將通過減去平均值并除以l2-范數(shù)而歸一化。 n_jobs:指定線程數(shù) """
2)邏輯回歸:二分算法,用于兩分類問題。需要預測函數(shù)的“大概形式”, 比如是線性還是非線性的。
上面有提到,該數(shù)據(jù)集需要一個線性的邊界。 不同數(shù)據(jù)需要不同的邊界。
from sklearn.linear_model import LogisticRegression # 定義邏輯回歸模型 model = LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='liblinear', max_iter=100, multi_class='ovr', verbose=0, warm_start=False, n_jobs=1) """參數(shù) --- penalty:使用指定正則化項(默認:l2) dual: n_samples > n_features取False(默認) C:正則化強度的反,值越小正則化強度越大 n_jobs: 指定線程數(shù) random_state:隨機數(shù)生成器 fit_intercept: 是否需要常量 """
3)樸素貝葉斯算法NB:用于判斷某件事的發(fā)生概率,我就曾用此算法做過輿情分類器。將一些語句變?yōu)?1二維矩陣,計算詞語的出現(xiàn)頻率,從而判斷語句的情感色彩是怎樣的。
效率很高,但存在一定的錯誤概率
from sklearn import naive_bayes model = naive_bayes.GaussianNB() # 高斯貝葉斯 model = naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None) model = naive_bayes.BernoulliNB(alpha=1.0, binarize=0.0, fit_prior=True, class_prior=None) """ 文本分類問題常用MultinomialNB 參數(shù) --- alpha:平滑參數(shù) fit_prior:是否要學習類的先驗概率;false-使用統(tǒng)一的先驗概率 class_prior: 是否指定類的先驗概率;若指定則不能根據(jù)參數(shù)調(diào)整 binarize: 二值化的閾值,若為None,則假設輸入由二進制向量組成 """
4)決策樹DT:類似流程圖的樹結構,它使用分支方法來說明決策的每個可能結果。樹中的每個節(jié)點代表對特定變量的測試 - 每個分支都是該測試的結果。
from sklearn import tree model = tree.DecisionTreeClassifier(criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False) """參數(shù) --- criterion :特征選擇準則gini/entropy max_depth:樹的最大深度,None-盡量下分 min_samples_split:分裂內(nèi)部節(jié)點,所需要的最小樣本樹 min_samples_leaf:葉子節(jié)點所需要的最小樣本數(shù) max_features: 尋找最優(yōu)分割點時的最大特征數(shù) max_leaf_nodes:優(yōu)先增長到最大葉子節(jié)點數(shù) min_impurity_decrease:如果這種分離導致雜質(zhì)的減少大于或等于這個值,則節(jié)點將被拆分。 """
5)支持向量機SVM:就是判斷線性可分不可分,能不能用直線分割兩類數(shù)據(jù)!理論可以推廣到三維,甚至思維以上的特征空間。三維使用平面來分隔數(shù)據(jù),四維和四維以上因為人類 無法直觀的感知出來,所以畫不出來,但是能分隔數(shù)據(jù),存在這樣的平面叫做超平面。
from sklearn.svm import SVC model = SVC(C=1.0, kernel='rbf', gamma='auto') """參數(shù) --- C:誤差項的懲罰參數(shù)C gamma: 核相關系數(shù)。浮點數(shù),If gamma is ‘a(chǎn)uto' then 1/n_features will be used instead. """
6)k近鄰算法KNN:采用測量不同特征值之間距離的方法對數(shù)據(jù)進行分類的一個算法。
給定一個樣本的集合,這里稱為訓練集,并且樣本中每個數(shù)據(jù)都包含標簽。對于新輸入的一個不包含標簽的數(shù)據(jù),通過計算這個新的數(shù)據(jù)與每一個樣本之間的距離,選取前k個,通常k小于20,以k個劇里最近的數(shù)據(jù)的標簽中出現(xiàn)次數(shù)最多的標簽作為該新加入的數(shù)據(jù)標簽。
K近鄰算法,即是給定一個訓練數(shù)據(jù)集,對新的輸入實例,在訓練數(shù)據(jù)集中找到與該實例最鄰近的K個實例,這K個實例的多數(shù)屬于某個類,就把該輸入實例分類到這個類中。(這就類似于現(xiàn)實生活中少數(shù)服從多數(shù)的思想)根據(jù)這個說法,咱們來看下引自維基百科上的一幅圖:
如果K=3,綠色圓點的最鄰近的3個點是2個紅色小三角形和1個藍色小正方形,少數(shù)從屬于多數(shù),基于統(tǒng)計的方法,判定綠色的這個待分類點屬于紅色的三角形一類。
如果K=5,綠色圓點的最鄰近的5個鄰居是2個紅色三角形和3個藍色的正方形,還是少數(shù)從屬于多數(shù),基于統(tǒng)計的方法,判定綠色的這個待分類點屬于藍色的正方形一類。
from sklearn import neighbors #定義kNN分類模型 model = neighbors.KNeighborsClassifier(n_neighbors=5, n_jobs=1) # 分類 model = neighbors.KNeighborsRegressor(n_neighbors=5, n_jobs=1) # 回歸 """參數(shù) --- n_neighbors: 使用鄰居的數(shù)目 n_jobs:并行任務數(shù) """
7)K-均值聚類(K-means):
- 定義目標聚類數(shù)K,例如,k=3
- 隨機初始化的 k 個聚類中心(controids)
- 計算每個數(shù)據(jù)點到K個聚類中心的Euclidean Distance,然后將數(shù)據(jù)點分到Euclidean Distance最小的對應類聚中心的那類
- 針對每個類別,重新計算它的聚類中心;
- 重復上面 3-4 兩步操作,直到達到某個中止條件(迭代次數(shù)、最小誤差變化等)
import pandas as pd import matplotlib.pyplot as plt from sklearn.cluster import KMeans df = pd.DataFrame({"x": [25, 34, 22, 27, 33, 33, 31, 22, 35, 34, 67, 54, 57, 43, 50, 57, 59, 52, 65, 47, 49, 48, 35, 33, 44, 45, 38, 43, 51, 46], "y": [79, 51, 53, 78, 59, 74, 73, 57, 69, 75, 51, 32, 40, 47, 53, 36, 35, 59, 59, 50, 25, 20, 14, 12, 20, 5, 29, 27, 8, 7]}) kmeans = KMeans(n_clusters=3).fit(df) centroids = kmeans.cluster_centers_ # 打印類聚中心 print(type(centroids), centroids) # 可視化類聚結果 fig, ax = plt.subplots() ax.scatter(df['x'],df['y'],c=kmeans.labels_.astype(float),s=50, alpha=0.5) ax.scatter(centroids[:, 0], centroids[:, 1], c='red', s=50) plt.show()
和KNN所不同,K-均值聚類屬于無監(jiān)督學習。
監(jiān)督學習知道從對象(數(shù)據(jù))中學習什么,而無監(jiān)督學習無需知道所要搜尋的目標,它是根據(jù)算法得到數(shù)據(jù)的共同特征。比如用分類和聚類來說,分類事先就知道所要得到的類別,而聚類則不一樣,只是以相似度為基礎,將對象分得不同的簇。
ps):我們在機器學習中一直會遇到兩種問題,一種是回歸問題,一種是分類問題。我們從字面上理解,很容易知道分類問題其實是將我們現(xiàn)有的數(shù)據(jù)分成若干類,然后對于新的數(shù)據(jù),我們根據(jù)所分得類而進行劃分;而回歸問題是將現(xiàn)有數(shù)據(jù)擬合成一條函數(shù),根據(jù)所擬合的函數(shù)來預測新的數(shù)據(jù)。 這兩者的區(qū)別就在于輸出變量的類型?;貧w是定量輸出,或者說是預測連續(xù)變量;分類問題書定量輸出,預測離散變量。Po一張我在知乎上看到的一張圖片,解釋的很好:
3、sklearn自帶方法joblib來進行保存訓練好的模型
from sklearn.externals import joblib # 保存模型 joblib.dump(model, 'model.pickle') #載入模型 model = joblib.load('model.pickle')
參考鏈接:
https://juejin.cn/post/6961934412518785054
https://juejin.cn/post/6844903513504530446
機器學習之邏輯回歸(純python實現(xiàn)) - 掘金 (juejin.cn)
機器學習筆記5-支持向量機1 - 掘金 (juejin.cn)
到此這篇關于python 數(shù)據(jù)挖掘算法的文章就介紹到這了,更多相關python 數(shù)據(jù)挖掘算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決torch.autograd.backward中的參數(shù)問題
今天小編就為大家分享一篇解決torch.autograd.backward中的參數(shù)問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01Python實現(xiàn)查找字符串數(shù)組最長公共前綴示例
這篇文章主要介紹了Python實現(xiàn)查找字符串數(shù)組最長公共前綴,涉及Python針對字符串的遍歷、判斷、計算等相關操作技巧,需要的朋友可以參考下2019-03-03Python數(shù)據(jù)結構與算法之完全樹與最小堆實例
這篇文章主要介紹了Python數(shù)據(jù)結構與算法之完全樹與最小堆,結合實例形式分析了Python完全樹定義及堆排序功能實現(xiàn)相關操作技巧,需要的朋友可以參考下2017-12-12Python 函數(shù)繪圖及函數(shù)圖像微分與積分
今天小編就為大家分享一篇Python 函數(shù)繪圖及函數(shù)圖像微分與積分,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11opencv-python+yolov3實現(xiàn)目標檢測
因為最近的任務有用到目標檢測,快速地了解了目標檢測這一任務,并且實現(xiàn)了使用opencv進行目標檢測。感興趣的可以了解一下2021-06-06