主頁 >  其他 > 機器學習分類演算法之LightGBM(梯度提升框架)

機器學習分類演算法之LightGBM(梯度提升框架)

2022-02-18 08:09:04 其他

目錄

走進LightGBM

什么是LightGBM?

XGBoost的缺點

LightGBM的優化

LightGBM的基本原理

Histogram 演算法

直方圖加速 

LightGBM并行優化

代碼實踐

引數詳解

? 代碼實操

最優模型及引數(資料集1000)

模型調參

每文一語


👇👇🧐🧐??🎉🎉

歡迎點擊專欄其他文章(歡迎訂閱·持續更新中~)

機器學習之Python開源教程——專欄介紹及理論知識概述

機器學習框架及評估指標詳解

Python監督學習之分類演算法的概述

資料預處理之資料清理,資料集成,資料規約,資料變化和離散化

特征工程之One-Hot編碼、label-encoding、自定義編碼

卡方分箱、KS分箱、最優IV分箱、樹結構分箱、自定義分箱

特征選取之單變數統計、基于模型選擇、迭代選擇

機器學習分類演算法之樸素貝葉斯

【萬字詳解·附代碼】機器學習分類演算法之K近鄰(KNN)

《全網最強》詳解機器學習分類演算法之決策樹(附可視化和代碼)

機器學習分類演算法之支持向量機

機器學習分類演算法之Logistic 回歸(邏輯回歸)

機器學習分類演算法之隨機森林(集成學習演算法)

機器學習分類演算法之XGBoost(集成學習演算法)

持續更新中~

作者簡介

👦博客名:王小王-123

👀簡介:CSDN博客專家、CSDN簽約作者、華為云享專家,騰訊云、阿里云、簡書、InfoQ創作者,公眾號:書劇可詩畫,2020年度CSDN優秀創作者,左手詩情畫意,右手代碼人生,歡迎一起探討技術


走進LightGBM

什么是LightGBM?

在上一篇的文章里,我介紹了XGBoost演算法,它是是很多的比賽的大殺器,但是在使用程序中,其訓練耗時很長,記憶體占用比較大

在2017年年1月微軟在GitHub的上開源了LightGBM,該演算法在不降低準確率的前提下,速度提升了10倍左右,占用記憶體下降了3倍左右,LightGBM是個快速的,分布式的,高性能的基于決策樹演算法的梯度提升演算法,可用于排序,分類,回歸以及很多其他的機器學習任務中,

GBDT (Gradient Boosting Decision Tree) 是機器學習中一個長盛不衰的模型,其主要思想是利用弱分類器(決策樹)迭代訓練以得到最優模型,該模型具有訓練效果好、不易過擬合等優點,GBDT不僅在工業界應用廣泛,通常被用于多分類、點擊率預測、搜索排序等任務;在各種資料挖掘競賽中也是致命武器,據統計Kaggle上的比賽有一半以上的冠軍方案都是基于GBDT,

而LightGBM(Light Gradient Boosting Machine)是一個實作GBDT演算法的框架,支持高效率的并行訓練,并且具有更快的訓練速度、更低的記憶體消耗、更好的準確率、支持分布式可以快速處理海量資料等優點,

LightGBM是一個梯度提升框架,使用基于樹的學習演算法,

常用的機器學習演算法,例如神經網路等演算法,都可以以mini-batch的方式訓練,訓練資料的大小不會受到記憶體限制,而GBDT在每一次迭代的時候,都需要遍歷整個訓練資料多次,如果把整個訓練資料裝進記憶體則會限制訓練資料的大小;如果不裝進記憶體,反復地讀寫訓練資料又會消耗非常大的時間,尤其面對工業級海量的資料,普通的GBDT演算法是不能滿足其需求的,

LightGBM提出的主要原因就是為了解決GBDT在海量資料遇到的問題,讓GBDT可以更好更快地用于工業實踐,

XGBoost的缺點

在LightGBM提出之前,最有名的GBDT工具就是XGBoost了,它是基于預排序方法的決策樹演算法,這種構建決策樹的演算法基本思想是:首先,對所有特征都按照特征的數值進行預排序,其次,在遍歷分割點的時候用O(#data)的代價找到一個特征上的最好分割點,最后,在找到一個特征的最好分割點后,將資料分裂成左右子節點,

這樣的預排序演算法的優點是能精確地找到分割點,但是缺點也很明顯:首先,空間消耗大,這樣的演算法需要保存資料的特征值,還保存了特征排序的結果(例如,為了后續快速的計算分割點,保存了排序后的索引),這就需要消耗訓練資料兩倍的記憶體,其次,時間上也有較大的開銷,在遍歷每一個分割點的時候,都需要進行分裂增益的計算,消耗的代價大,最后,對cache優化不友好,在預排序后,特征對梯度的訪問是一種隨機訪問,并且不同的特征訪問的順序不一樣,無法對cache進行優化,同時,在每一層長樹的時候,需要隨機訪問一個行索引到葉子索引的陣列,并且不同特征訪問的順序也不一樣,也會造成較大的cache miss,

LightGBM的優化

為了避免XGBoost的缺陷,并且能夠在不損害準確率的條件下加快GBDT模型的訓練速度,lightGBM在傳統的GBDT演算法上進行了如下優化:

  • 基于Histogram的決策樹演算法,
  • 單邊梯度采樣 Gradient-based One-Side Sampling(GOSS):使用GOSS可以減少大量只具有小梯度的資料實體,這樣在計算資訊增益的時候只利用剩下的具有高梯度的資料就可以了,相比XGBoost遍歷所有特征值節省了不少時間和空間上的開銷,
  • 互斥特征捆綁 Exclusive Feature Bundling(EFB):使用EFB可以將許多互斥的特征系結為一個特征,這樣達到了降維的目的,
  • 帶深度限制的Leaf-wise的葉子生長策略:大多數GBDT工具使用低效的按層生長 (level-wise) 的決策樹生長策略,因為它不加區分的對待同一層的葉子,帶來了很多沒必要的開銷,實際上很多葉子的分裂增益較低,沒必要進行搜索和分裂,LightGBM使用了帶有深度限制的按葉子生長 (leaf-wise) 演算法,
  • 直接支持類別特征(Categorical Feature)
  • 支持高效并行
  • Cache命中率優化

LightGBM的基本原理

LightGBM樹的生長方式是垂直方向的,其他的演算法都是水平方向的,也就是說Light GBM生長的是樹的葉子,其他的演算法生長的是樹的層次,

LightGBM選擇具有最大誤差的樹葉進行生長,當生長同樣的樹葉,生長葉子的演算法可以比基于層的演算法減少更多的loss,

下面的圖解釋了LightGBM和其他的提升演算法的實作

在 Histogram 演算法之上,LightGBM 進行進一步的優化,首先它拋棄了大多數 GBDT 工具使用的按層生長 (level-wise) 的決策樹生長策略,而使用了帶有深度限制的按葉子生長 (leaf-wise) 演算法,Level-wise 過一次資料可以同時分裂同一層的葉子,容易進行多執行緒優化,也好控制模型復雜度,不容易過擬合,但實際上 Level-wise 是一種低效的演算法,因為它不加區分的對待同一層的葉子,帶來了很多沒必要的開銷,因為實際上很多葉子的分裂增益較低,沒必要進行搜索和分裂,

Leaf-wise 則是一種更為高效的策略,每次從當前所有葉子中,找到分裂增益最大的一個葉子,然后分裂,如此回圈,因此同 Level-wise 相比,在分裂次數相同的情況下,Leaf-wise 可以降低更多的誤差,得到更好的精度,Leaf-wise 的缺點是可能會長出比較深的決策樹,產生過擬合,因此 LightGBM 在 Leaf-wise 之上增加了一個最大深度的限制,在保證高效率的同時防止過擬合,

資料的數量每天都在增加,對于傳統的資料科學演算法來說,很難快速的給出結果,LightGBM的前綴‘Light’表示速度很快,LightGBM可以處理大量的資料,運行時占用很少的記憶體,另外一個理由,LightGBM為什么這么受歡迎是因為它把重點放在結果的準確率上,LightGBM還支持GPU學習,因此,資料科學家廣泛的使用LightGBM來進行資料科學應用的部署,

既然可以提升速度,那么它可以在小資料集上面使用嗎?

不可以!不建議在小資料集上使用LightGBM,LightGBM對過擬合很敏感,對于小資料集非常容易過擬合,對于多小屬于小資料集,并沒有什么閾值,但是從我的經驗,我建議對于10000+以上的資料的時候,再使用LightGBM,這也很明顯,因為小的資料集使用XGBoost就可以了呀,

實作LightGBM非常簡單,復雜的是引數的除錯,LightGBM有超過100個引數,但是不用擔心,你不需要所有的都學,

Histogram 演算法

直方圖演算法的基本思想是先把連續的浮點特征值離散化成k個整數,同時構造一個寬度為k的直方圖,在遍歷資料的時候,根據離散化后的值作為索引在直方圖中累積統計量,當遍歷一次資料后,直方圖累積了需要的統計量,然后根據直方圖的離散值,遍歷尋找最優的分割點,

使用直方圖演算法有很多優點,首先,最明顯就是記憶體消耗的降低,直方圖演算法不僅不需要額外存盤預排序的結果,而且可以只保存特征離散化后的值,而這個值一般用 8 位整型存盤就足夠了,記憶體消耗可以降低為原來的1/8, (記憶體消耗低)

? 然后在計算上的代價也大幅降低,預排序演算法每遍歷一個特征值就需要計算一次分裂的增益,而直方圖演算法只需要計算k次(k可以認為是常數),時間復雜度從O(#data*#feature)優化到O(k*#features),

? 當然,Histogram 演算法并不是完美的,由于特征被離散化后,找到的并不是很精確的分割點,所以會對結果產生影響,但在不同的資料集上的結果表明,離散化的分割點對最終的精度影響并不是很大,甚至有時候會更好一點,

直方圖加速 

? LightGBM 另一個優化是 Histogram(直方圖)做差加速,一個容易觀察到的現象:一個葉子的直方圖可以由它的父親節點的直方圖與它兄弟的直方圖做差得到,通常構造直方圖,需要遍歷該葉子上的所有資料,但直方圖做差僅需遍歷直方圖的k個桶,利用這個方法,LightGBM 可以在構造一個葉子的直方圖后,可以用非常微小的代價得到它兄弟葉子的直方圖,在速度上可以提升一倍,

實際上大多數機器學習工具都無法直接支持類別特征,一般需要把類別特征,轉化到多維的0/1 特征,降低了空間和時間的效率,而類別特征的使用是在實踐中很常用的,基于這個考慮,LightGBM 優化了對類別特征的支持,可以直接輸入類別特征,不需要額外的0/1 展開,并在決策樹演算法上增加了類別特征的決策規則,在 Expo 資料集上的實驗,相比0/1 展開的方法,訓練速度可以加速 8 倍,并且精度一致,據我們所知,LightGBM 是第一個直接支持類別特征的 GBDT 工具,

? LightGBM 的單機版本還有很多其他細節上的優化,比如 cache 訪問優化,多執行緒優化,稀疏特征優化等等,優化匯總如下:

LightGBM并行優化

LightGBM 還具有支持高效并行的優點,LightGBM 原生支持并行學習,目前支持特征并行和資料并行的兩種,

特征并行的主要思想是在不同機器在不同的特征集合上分別尋找最優的分割點,然后在機器間同步最優的分割點,
資料并行則是讓不同的機器先在本地構造直方圖,然后進行全域的合并,最后在合并的直方圖上面尋找最優分割點,

? LightGBM 針對這兩種并行方法都做了優化:

在特征并行演算法中,通過在本地保存全部資料避免對資料切分結果的通信;
在資料并行中使用分散規約 (Reduce scatter) 把直方圖合并的任務分攤到不同的機器,降低通信和計算,并利用直方圖做差,進一步減少了一半的通信量,基于投票的資料并行則進一步優化資料并行中的通信代價,使通信代價變成常數級別,在資料量很大的時候,使用投票并行可以得到非常好的加速效果,

注意:

  • 當生長相同的葉子時,Leaf-wise 比 level-wise 減少更多的損失,
  • 高速,高效處理大資料,運行時需要更低的記憶體,支持 GPU
  • 不要在少量資料上使用,會過擬合,建議 10,000+ 行記錄時使用,

代碼實踐

引數詳解

一下引數可以提高準確率

learning_rate:學習率.

默認值:0.1
調參策略:最開始可以設定得大一些,如0.1,調整完其他引數之后最后再將此引數調小,
取值范圍:0.01~0.3.

max_depth:樹模型深度

默認值:-1
調整策略:無
取值范圍:3-8(不超過10)

num_leaves:葉子節點數,數模型復雜度

降低過擬合

max_bin:工具箱數(葉子結點數+非葉子節點數?)

bin的最大數 決定 特征的最大組數(類似特征會被組合)
小的bin數量會降低訓練精度(accuracy),但是可能可以提高泛化性能(genreal power)
LightGBM 將根據 max_bin 自動壓縮記憶體, 例如, 如果 maxbin=255, 那么 LightGBM 將使用 uint8t 的特性值

min_data_in_leaf:一個葉子上資料的最小數量. 可以用來處理過擬合

默認值:20
調參策略:搜索,盡量不要太大,

feature_fraction:每次迭代中隨機選擇特征的比例,

默認值:1.0
調參策略:0.5-0.9之間調節,
可以用來加速訓練
可以用來處理過擬合

bagging_fraction:不進行重采樣的情況下隨機選擇部分資料

默認值:1.0
調參策略:0.5-0.9之間調節,
可以用來加速訓練
可以用來處理過擬合

bagging_freq:bagging的次數,0表示禁用bagging,非零值表示執行k次bagging

默認值:0
調參策略:3-5

其他

lambda_l1:L1正則
lambda_l2:L2正則

min_split_gain:執行切分的最小增益
默認值:0.1

代碼實操

#匯入所需要的包
from sklearn.metrics import precision_score
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import classification_report#評估報告
from sklearn.model_selection import cross_val_score #交叉驗證
from sklearn.model_selection import GridSearchCV #網格搜索
import matplotlib.pyplot as plt#可視化
import seaborn as sns#繪圖包
from sklearn.preprocessing import StandardScaler,MinMaxScaler,MaxAbsScaler#歸一化,標準化
# 忽略警告
import warnings
warnings.filterwarnings("ignore")
from sklearn.metrics import precision_score
import lightgbm as lgb  

最優模型及引數(資料集1000)

有的小伙伴會有疑問,咋我們的lightGBM效果沒有XGBoost好呀,原因出在我們的資料上,因為這個是一個小的資料集,效果可以達到這個,完全是不斷迭代優化引數的效果,

df=pd.read_csv(r"資料.csv")

X=df.iloc[:,:-1]
y=df.iloc[:,-1]
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,stratify=y,random_state=1)
model=lgb.LGBMClassifier(n_estimators=39,max_depth=8,num_leaves=12,max_bin=7,min_data_in_leaf=10,bagging_fraction=0.5,
                             feature_fraction=0.59,boosting_type="gbdt",application="binary",min_split_gain=0.15,
                             n_jobs=-1,bagging_freq=30,lambda_l1=1e-05,lambda_l2=1e-05,learning_rate=0.1,
                         random_state=90)
model.fit(X_train,y_train)
# 預測值
y_pred = model.predict(X_test)
'''
評估指標
'''
# # 求出預測和真實一樣的數目
true = np.sum(y_pred == y_test )
print('預測對的結果數目為:', true)
print('預測錯的的結果數目為:', y_test.shape[0]-true)
# 評估指標
from sklearn.metrics import accuracy_score,precision_score,recall_score,f1_score,cohen_kappa_score
print('預測資料的準確率為: {:.4}%'.format(accuracy_score(y_test,y_pred)*100))
print('預測資料的精確率為:{:.4}%'.format(
      precision_score(y_test,y_pred)*100))
print('預測資料的召回率為:{:.4}%'.format(
      recall_score(y_test,y_pred)*100))
# print("訓練資料的F1值為:", f1score_train)
print('預測資料的F1值為:',
      f1_score(y_test,y_pred))
print('預測資料的Cohen’s Kappa系數為:',
      cohen_kappa_score(y_test,y_pred))
# 列印分類報告
print('預測資料的分類報告為:','\n',
      classification_report(y_test,y_pred))

# ROC曲線、AUC
from sklearn.metrics import precision_recall_curve
from sklearn import metrics
# 預測正例的概率
y_pred_prob=model.predict_proba(X_test)[:,1]
# y_pred_prob ,回傳兩列,第一列代表類別0,第二列代表類別1的概率
#https://blog.csdn.net/dream6104/article/details/89218239
fpr, tpr, thresholds = metrics.roc_curve(y_test,y_pred_prob, pos_label=2)
#pos_label,代表真陽性標簽,就是說是分類里面的好的標簽,這個要看你的特征目標標簽是0,1,還是1,2
roc_auc = metrics.auc(fpr, tpr)  #auc為Roc曲線下的面積
# print(roc_auc)
plt.figure(figsize=(8,6))
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.plot(fpr, tpr, 'r',label='AUC = %0.2f'% roc_auc)
plt.legend(loc='lower right')
# plt.plot([0, 1], [0, 1], 'r--')
plt.xlim([0, 1.1])
plt.ylim([0, 1.1])
plt.xlabel('False Positive Rate') #橫坐標是fpr
plt.ylabel('True Positive Rate')  #縱坐標是tpr
plt.title('Receiver operating characteristic example')
plt.show()

模型調參

嘗試學習曲線進行調參

初始化我們的引數,也可以通過在訓練集上的網格搜索確定大致的引數位置,然后利用學習曲線去迭代最佳的引數

model=lgb.LGBMClassifier(boosting_type='gbdt',objective='binary',metrics='auc',learning_rate=0.01, n_estimators=39, max_depth=4, 
                         num_leaves=12,max_bin=15,min_data_in_leaf=11,bagging_fraction=0.8,bagging_freq=20, feature_fraction= 0.7,
lambda_l1=1e-05,lambda_l2=1e-05,min_split_gain=0.5)

例如:

params_test5={'min_split_gain':[0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]}
              
gsearch5 = GridSearchCV(estimator = lgb.LGBMClassifier(boosting_type='gbdt',objective='binary',metrics='auc',learning_rate=0.01, 
                                                       n_estimators=1000, max_depth=4, num_leaves=12,max_bin=15,min_data_in_leaf=11,
                                                       bagging_fraction=0.8,bagging_freq=20, feature_fraction= 0.7,
                                                       lambda_l1=1e-05,lambda_l2=1e-05,min_split_gain=0.5), 
                                                       param_grid = params_test5, scoring='roc_auc',cv=5)
gsearch5.fit(X_train,y_train)
gsearch5.best_params_, gsearch5.best_score_

學習曲線

scorel = []
for i in range(0,200,10):
    model = lgb.LGBMClassifier(n_estimators=i+1,random_state=2022).fit(X_train,y_train)
    score = model.score(X_test,y_test)
    scorel.append(score)

print(max(scorel),(scorel.index(max(scorel))*10)+1)  #作圖反映出準確度隨著估計器數量的變化,110的附近最好
plt.figure(figsize=[20,5])
plt.plot(range(1,200,10),scorel)
plt.show()

## 根據上面的顯示最優點在51附近,進一步細化學習曲線
scorel = []
for i in range(35,45):
    RFC = lgb.LGBMClassifier(n_estimators=i,
                                 n_jobs=-1,
                                 random_state=90).fit(X_train,y_train)
    score = RFC.score(X_test,y_test)
    scorel.append(score)

print(max(scorel),([*range(35,45)][scorel.index(max(scorel))]))  #112是最優的估計器數量 #最優得分是0.98945
plt.figure(figsize=[20,5])
plt.plot(range(35,45),scorel) 
plt.show()

max_depth

scorel = []
for i in range(3,20):
    RFC = lgb.LGBMClassifier(n_estimators=39,max_depth=i,
                                 n_jobs=-1,
                                 random_state=90).fit(X_train,y_train)
    score = RFC.score(X_test,y_test)
    scorel.append(score)

print(max(scorel),([*range(3,20)][scorel.index(max(scorel))]))  #112是最優的估計器數量 #最優得分是0.98945
plt.figure(figsize=[20,5])
plt.plot(range(3,20),scorel) 
plt.show()

整數區間引數調優(手動修改即可)

scorel = []
for i in np.arange(7,45,1):
    RFC = lgb.LGBMClassifier(n_estimators=39,max_depth=8,num_leaves=12,max_bin=7,min_data_in_leaf=10,bagging_fraction=0.5,feature_fraction=0.6,
                                 n_jobs=-1,bagging_freq=30,
                                 random_state=90).fit(X_train,y_train)
    score = RFC.score(X_test,y_test)
    scorel.append(score)

print(max(scorel),([*np.arange(7,45,1)][scorel.index(max(scorel))]))  #112是最優的估計器數量 #最優得分是0.98945
plt.figure(figsize=[20,5])
plt.plot(np.arange(7,45,1),scorel) 
plt.show()
# num_leaves=12,max_bin=15,min_data_in_leaf=11,bagging_fraction=0.8,bagging_freq=20, feature_fraction= 0.7,

浮點數引數(手動修改)

scorel = []
for i in np.arange(0.01,1,0.01):
    RFC = lgb.LGBMClassifier(n_estimators=39,max_depth=8,num_leaves=12,max_bin=7,min_data_in_leaf=10,bagging_fraction=0.5,
                             feature_fraction=0.59,min_split_gain=i,
                             n_jobs=-1,bagging_freq=30,
                             random_state=90).fit(X_train,y_train)
    score = RFC.score(X_test,y_test)
    scorel.append(score)

print(max(scorel),([*np.arange(0.01,1,0.01)][scorel.index(max(scorel))]))  #112是最優的估計器數量 #最優得分是0.98945
plt.figure(figsize=[20,5])
plt.plot(np.arange(0.01,1,0.01),scorel) 
plt.show()

寫到最后:

該演算法所使用的場景一定要記住,在資料量大的情況下

每文一語

每天都要加油呀!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/426509.html

標籤:AI

上一篇:用Python做了一個貓狗識別系統~

下一篇:22/02/17學習筆記

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more