<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用 XGBoost 開發(fā)隨機(jī)森林集成

          共 15783字,需瀏覽 32分鐘

           ·

          2021-05-16 16:08

          XGBoost庫提供了梯度增強(qiáng)的有效實(shí)現(xiàn),可以將其配置為訓(xùn)練隨機(jī)森林集成。隨機(jī)森林是比梯度增強(qiáng)更簡單的算法。XGBoost庫允許以重新利用和利用庫中實(shí)現(xiàn)的計(jì)算效率來訓(xùn)練隨機(jī)森林模型的方式來訓(xùn)練模型。
          在本教程中,您將發(fā)現(xiàn)如何使用XGBoost庫來開發(fā)隨機(jī)森林集成。完成本教程后,您將知道:
          • XGBoost提供了梯度增強(qiáng)的有效實(shí)現(xiàn),可以將其配置為訓(xùn)練隨機(jī)森林集成。
          • 如何使用XGBoost API訓(xùn)練和評(píng)估隨機(jī)森林集成模型以進(jìn)行分類和回歸。
          • 如何調(diào)整XGBoost隨機(jī)森林集成模型的超參數(shù)。
          教程概述
          本教程分為五個(gè)部分。他們是:
          • XGBoost的隨機(jī)森林
          • 隨機(jī)森林的XGBoost API
          • XGBoost分類隨機(jī)森林
          • XGBoost回歸隨機(jī)森林
          • XGBoost隨機(jī)森林超參數(shù)
          XGBoost的隨機(jī)森林
          XGBoost是一個(gè)開放源代碼庫,它提供了梯度增強(qiáng)集成算法的有效實(shí)現(xiàn),該算法簡稱為Extreme Gradient Boosting或XGBoost。因此,XGBoost指的是項(xiàng)目,庫和算法本身。梯度提升是分類和回歸預(yù)測建模項(xiàng)目的首選算法,因?yàn)樗ǔ?梢詫?shí)現(xiàn)最佳性能。梯度提升的問題在于訓(xùn)練模型通常非常慢,并且大型數(shù)據(jù)集激怒了這個(gè)問題。XGBoost通過引入許多技術(shù)來極大地加速模型的訓(xùn)練,并常常導(dǎo)致更好的模型整體性能,從而解決了梯度增強(qiáng)的速度問題。
          您可以在本教程中了解有關(guān)XGBoost的更多信息:

          XGBoost的實(shí)用機(jī)器學(xué)習(xí)簡介

          https://machinelearningmastery.com/gentle-introduction-xgboost-applied-machine-learning/

          除了支持梯度增強(qiáng)之外,還可以將核心XGBoost算法配置為支持其他類型的樹集成算法,例如隨機(jī)森林。隨機(jī)森林是決策樹算法的集合。每個(gè)決策樹都適合訓(xùn)練數(shù)據(jù)集的引導(dǎo)樣本。這是訓(xùn)練數(shù)據(jù)集的樣本,其中可以多次選擇給定的示例(行),稱為替換樣本。重要的是,要考慮樹中每個(gè)分割點(diǎn)的輸入變量(列)的隨機(jī)子集。這樣可以確保添加到合奏中的每棵樹都是熟練的,但是在隨機(jī)方式上是不同的。在每個(gè)分割點(diǎn)考慮的特征數(shù)量通常只是一小部分。例如,在分類問題上,一種常見的啟發(fā)式方法是選擇特征數(shù)量等于特征總數(shù)的平方根,例如如果數(shù)據(jù)集具有20個(gè)輸入變量,則為4。您可以在本教程中了解有關(guān)隨機(jī)森林集成算法的更多信息:

          如何使用Python開發(fā)隨機(jī)森林集成體

          https://machinelearningmastery.com/random-forest-ensemble-in-python/

          使用XGBoost庫訓(xùn)練隨機(jī)森林集成的主要好處是速度。與其他實(shí)現(xiàn)(例如本機(jī)scikit-learn實(shí)現(xiàn))相比,預(yù)期使用起來會(huì)更快?,F(xiàn)在我們知道XGBoost提供了相對(duì)于基準(zhǔn)性能而言是已知的。
          隨機(jī)森林的XGBoost API
          第一步是安裝XGBoost庫。我建議從命令行使用以下命令來使用pip軟件包管理器:
          sudo pip install xgboost
          安裝完成后,我們可以加載該庫并使用Python腳本打印版本,以確認(rèn)它已正確安裝。
          # check xgboost version
          import xgboost
          # display version
          print(xgboost.__version__)
          運(yùn)行腳本將加載XGBoost庫并打印該庫的版本號(hào)。
          您的版本號(hào)應(yīng)該相同或更高。
          1.0.2
          XGBoost庫提供了兩個(gè)包裝器類,這些包裝器類允許該庫提供的隨機(jī)森林實(shí)現(xiàn)與scikit-learn機(jī)器學(xué)習(xí)庫一起使用。
          它們分別是用于分類和回歸的XGBRFClassifier和XGBRFRegressor類。
          # define the model
          model = XGBRFClassifier()
          可以通過“ n_estimators”自變量設(shè)置集合中使用的樹數(shù),并且通常會(huì)增加該樹數(shù),直到模型未觀察到性能進(jìn)一步提高為止。通常使用數(shù)百或數(shù)千棵樹。
          # define the model
          model = XGBRFClassifier(n_estimators=100)
          XGBoost不支持為每個(gè)決策樹繪制引導(dǎo)程序樣本。這是庫的限制。取而代之的是,可以通過“子樣本”參數(shù)將訓(xùn)練數(shù)據(jù)集的子樣本指定為0.0到1.0(訓(xùn)練數(shù)據(jù)集中的行的100%)之間的百分比,而無需替換。建議使用0.8或0.9的值,以確保數(shù)據(jù)集足夠大以訓(xùn)練熟練的模型,但又足夠不同以將整體引入某種多樣性。
          # define the model
          model = XGBRFClassifier(n_estimators=100, subsample=0.9)
          訓(xùn)練模型時(shí),每個(gè)分割點(diǎn)使用的特征數(shù)量可以通過“ colsample_bynode”參數(shù)指定,并采用數(shù)據(jù)集中列數(shù)的百分比(從0.0到1.0)(訓(xùn)練數(shù)據(jù)集中輸入行的100%)。
          如果我們在訓(xùn)練數(shù)據(jù)集中有20個(gè)輸入變量,并且分類問題的啟發(fā)式是要素?cái)?shù)量的平方根,則可以將其設(shè)置為sqrt(20)/ 20,或大約4/20或0.2。
          # define the model
          model = XGBRFClassifier(n_estimators=100, subsample=0.9, colsample_bynode=0.2)
          您可以在此處了解更多有關(guān)如何為隨機(jī)森林合奏配置XGBoost庫的信息:

          XGBoost中的隨機(jī)森林

          https://xgboost.readthedocs.io/en/latest/tutorials/rf.html

          現(xiàn)在,我們已經(jīng)熟悉了如何使用XGBoost API定義隨機(jī)森林集合,讓我們來看一些可行的示例。
          XGBoost分類隨機(jī)森林
          在本節(jié)中,我們將研究為分類問題開發(fā)XGBoost隨機(jī)森林集合。
          首先,我們可以使用make_classification()函數(shù)創(chuàng)建具有1,000個(gè)示例和20個(gè)輸入特征的綜合二進(jìn)制分類問題。
          下面列出了完整的示例。
          # test classification dataset
          from sklearn.datasets import make_classification
          # define dataset
          X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=7)
          # summarize the dataset
          print(X.shape, y.shape)
          運(yùn)行示例將創(chuàng)建數(shù)據(jù)集并總結(jié)輸入和輸出組件的形狀。
          (1000, 20) (1000,)
          接下來,我們可以在該數(shù)據(jù)集上評(píng)估XGBoost隨機(jī)森林算法。
          我們將使用重復(fù)的分層k折交叉驗(yàn)證(具有3個(gè)重復(fù)和10折)對(duì)模型進(jìn)行評(píng)估。我們將報(bào)告所有重復(fù)和折疊中模型準(zhǔn)確性的均值和標(biāo)準(zhǔn)差。
          # evaluate xgboost random forest algorithm for classification
          from numpy import mean
          from numpy import std
          from sklearn.datasets import make_classification
          from sklearn.model_selection import cross_val_score
          from sklearn.model_selection import RepeatedStratifiedKFold
          from xgboost import XGBRFClassifier
          # define dataset
          X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=7)
          # define the model
          model = XGBRFClassifier(n_estimators=100, subsample=0.9, colsample_bynode=0.2)
          # define the model evaluation procedure
          cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
          # evaluate the model and collect the scores
          n_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)
          # report performance
          print('Mean Accuracy: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))
          運(yùn)行示例將報(bào)告模型的均值和標(biāo)準(zhǔn)差準(zhǔn)確性。
          注意:由于算法或評(píng)估程序的隨機(jī)性,或者數(shù)值精度的差異,您的結(jié)果可能會(huì)有所不同??紤]運(yùn)行該示例幾次并比較平均結(jié)果。
          在這種情況下,我們可以看到XGBoost隨機(jī)森林集成實(shí)現(xiàn)了大約89.1%的分類精度。
          Mean Accuracy: 0.891 (0.036)
          我們還可以將XGBoost隨機(jī)森林模型用作最終模型,并進(jìn)行分類預(yù)測。
          首先,將XGBoost隨機(jī)森林集合適合所有可用數(shù)據(jù),然后可以調(diào)用prepare()函數(shù)對(duì)新數(shù)據(jù)進(jìn)行預(yù)測。
          下面的示例在我們的二進(jìn)制分類數(shù)據(jù)集中展示了這一點(diǎn)。
          # make predictions using xgboost random forest for classification
          from numpy import asarray
          from sklearn.datasets import make_classification
          from xgboost import XGBRFClassifier
          # define dataset
          X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=7)
          # define the model
          model = XGBRFClassifier(n_estimators=100, subsample=0.9, colsample_bynode=0.2)
          # fit the model on the whole dataset
          model.fit(X, y)
          # define a row of data
          row = [0.2929949,-4.21223056,-1.288332,-2.17849815,-0.64527665,2.58097719,0.28422388,-7.1827928,-1.91211104,2.73729512,0.81395695,3.96973717,-2.66939799,3.34692332,4.19791821,0.99990998,-0.30201875,-4.43170633,-2.82646737,0.44916808]
          row = asarray([row])
          # make a prediction
          yhat = model.predict(row)
          # summarize the prediction
          print('Predicted Class: %d' % yhat[0])
          運(yùn)行示例將XGBoost隨機(jī)森林集成模型適合整個(gè)數(shù)據(jù)集,然后將其用于對(duì)新的數(shù)據(jù)行進(jìn)行預(yù)測,就像我們在應(yīng)用程序中使用模型時(shí)一樣。
          Predicted Class: 1
          既然我們熟悉如何使用隨機(jī)森林進(jìn)行分類,那么讓我們看一下用于回歸的API。
          XGBoost回歸隨機(jī)森林
          在本節(jié)中,我們將研究為回歸問題開發(fā)XGBoost隨機(jī)森林集合。首先,我們可以使用make_regression()函數(shù)創(chuàng)建具有1000個(gè)示例和20個(gè)輸入要素的綜合回歸問題。下面列出了完整的示例。
          # test regression dataset
          from sklearn.datasets import make_regression
          # define dataset
          X, y = make_regression(n_samples=1000, n_features=20, n_informative=15, noise=0.1, random_state=7)
          # summarize the dataset
          print(X.shape, y.shape)
          運(yùn)行示例將創(chuàng)建數(shù)據(jù)集并總結(jié)輸入和輸出組件的形狀。
          (1000, 20) (1000,)
          接下來,我們可以在該數(shù)據(jù)集上評(píng)估XGBoost隨機(jī)森林集合。
          正如我們在上一節(jié)所做的那樣,我們將使用重復(fù)的k倍交叉驗(yàn)證(三個(gè)重復(fù)和10倍)來評(píng)估模型。
          我們將報(bào)告所有重復(fù)和折疊過程中模型的平均絕對(duì)誤差(MAE)。scikit-learn庫使MAE變?yōu)樨?fù)數(shù),從而使其最大化而不是最小化。這意味著較大的負(fù)MAE會(huì)更好,并且理想模型的MAE為0。
          下面列出了完整的示例。
          # evaluate xgboost random forest ensemble for regression
          from numpy import mean
          from numpy import std
          from sklearn.datasets import make_regression
          from sklearn.model_selection import cross_val_score
          from sklearn.model_selection import RepeatedKFold
          from xgboost import XGBRFRegressor
          # define dataset
          X, y = make_regression(n_samples=1000, n_features=20, n_informative=15, noise=0.1, random_state=7)
          # define the model
          model = XGBRFRegressor(n_estimators=100, subsample=0.9, colsample_bynode=0.2)
          # define the model evaluation procedure
          cv = RepeatedKFold(n_splits=10, n_repeats=3, random_state=1)
          # evaluate the model and collect the scores
          n_scores = cross_val_score(model, X, y, scoring='neg_mean_absolute_error', cv=cv, n_jobs=-1)
          # report performance
          print('MAE: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))
          運(yùn)行示例將報(bào)告模型的均值和標(biāo)準(zhǔn)差MAE。
          注意:由于算法或評(píng)估程序的隨機(jī)性,或者數(shù)值精度的差異,您的結(jié)果可能會(huì)有所不同。考慮運(yùn)行該示例幾次并比較平均結(jié)果。
          在這種情況下,我們可以看到具有默認(rèn)超參數(shù)的隨機(jī)森林集合達(dá)到了約108的MAE。
          MAE: -108.290 (5.647)
          我們還可以將XGBoost隨機(jī)森林集合用作最終模型,并進(jìn)行回歸預(yù)測。
          首先,將隨機(jī)森林集合適合所有可用數(shù)據(jù),然后可以調(diào)用predict()函數(shù)對(duì)新數(shù)據(jù)進(jìn)行預(yù)測。
          下面的示例在我們的回歸數(shù)據(jù)集中展示了這一點(diǎn)。
          # gradient xgboost random forest for making predictions for regression
          from numpy import asarray
          from sklearn.datasets import make_regression
          from xgboost import XGBRFRegressor
          # define dataset
          X, y = make_regression(n_samples=1000, n_features=20, n_informative=15, noise=0.1, random_state=7)
          # define the model
          model = XGBRFRegressor(n_estimators=100, subsample=0.9, colsample_bynode=0.2)
          # fit the model on the whole dataset
          model.fit(X, y)
          # define a single row of data
          row = [0.20543991,-0.97049844,-0.81403429,-0.23842689,-0.60704084,-0.48541492,0.53113006,2.01834338,-0.90745243,-1.85859731,-1.02334791,-0.6877744,0.60984819,-0.70630121,-1.29161497,1.32385441,1.42150747,1.26567231,2.56569098,-0.11154792]
          row = asarray([row])
          # make a prediction
          yhat = model.predict(row)
          # summarize the prediction
          print('Prediction: %d' % yhat[0])
          運(yùn)行示例將XGBoost隨機(jī)森林集成模型適合整個(gè)數(shù)據(jù)集,然后將其用于對(duì)新的數(shù)據(jù)行進(jìn)行預(yù)測,就像我們在應(yīng)用程序中使用模型時(shí)一樣。
          Prediction: 17
          現(xiàn)在,我們已經(jīng)熟悉了如何開發(fā)和評(píng)估XGBoost隨機(jī)森林集成,讓我們來看一下配置模型。
          XGBoost隨機(jī)森林超參數(shù)
          在本節(jié)中,我們將仔細(xì)研究一些您應(yīng)該考慮針對(duì)隨機(jī)森林集合進(jìn)行調(diào)優(yōu)的超參數(shù)及其對(duì)模型性能的影響。
          探索樹木數(shù)量
          樹的數(shù)量是為XGBoost隨機(jī)森林配置的另一個(gè)關(guān)鍵超參數(shù)。通常,增加樹的數(shù)量,直到模型性能穩(wěn)定為止。直覺可能表明,更多的樹木將導(dǎo)致過度擬合,盡管事實(shí)并非如此??紤]到學(xué)習(xí)算法的隨機(jī)性,裝袋算法和隨機(jī)森林算法似乎都不太適合過度擬合訓(xùn)練數(shù)據(jù)集??梢酝ㄟ^“ n_estimators”參數(shù)設(shè)置樹的數(shù)量,默認(rèn)為100。下面的示例探討值在10到1,000之間的樹木數(shù)量的影響。
          # explore xgboost random forest number of trees effect on performance
          from numpy import mean
          from numpy import std
          from sklearn.datasets import make_classification
          from sklearn.model_selection import cross_val_score
          from sklearn.model_selection import RepeatedStratifiedKFold
          from xgboost import XGBRFClassifier
          from matplotlib import pyplot
           
          # get the dataset
          def get_dataset():
           X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=7)
           return X, y
           
          # get a list of models to evaluate
          def get_models():
           models = dict()
           # define the number of trees to consider
           n_trees = [105010050010005000]
           for v in n_trees:
            models[str(v)] = XGBRFClassifier(n_estimators=v, subsample=0.9, colsample_bynode=0.2)
           return models
           
          # evaluate a give model using cross-validation
          def evaluate_model(model, X, y):
           # define the model evaluation procedure
           cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
           # evaluate the model
           scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)
           return scores
           
          # define dataset
          X, y = get_dataset()
          # get the models to evaluate
          models = get_models()
          # evaluate the models and store results
          results, names = list(), list()
          for name, model in models.items():
           # evaluate the model and collect the results
           scores = evaluate_model(model, X, y)
           # store the results
           results.append(scores)
           names.append(name)
           # summarize performance along the way
           print('>%s %.3f (%.3f)' % (name, mean(scores), std(scores)))
          # plot model performance for comparison
          pyplot.boxplot(results, labels=names, showmeans=True)
          pyplot.show()
          首先運(yùn)行示例將報(bào)告每個(gè)已配置數(shù)量的樹的平均準(zhǔn)確性。
          注意:由于算法或評(píng)估程序的隨機(jī)性,或者數(shù)值精度的差異,您的結(jié)果可能會(huì)有所不同??紤]運(yùn)行該示例幾次并比較平均結(jié)果。
          在這種情況下,我們可以看到性能在大約500棵樹之后上升并保持穩(wěn)定。平均準(zhǔn)確度分?jǐn)?shù)在500棵,1,000棵和5,000棵樹上波動(dòng),這可能是統(tǒng)計(jì)噪聲。
          >10 0.868 (0.030)
          >50 0.887 (0.034)
          >100 0.891 (0.036)
          >500 0.893 (0.033)
          >1000 0.895 (0.035)
          >5000 0.894 (0.036)
          創(chuàng)建箱須圖以分配每種配置數(shù)量的樹的準(zhǔn)確性得分。

          探索特征數(shù)量
          為每個(gè)分割點(diǎn)隨機(jī)采樣的要素?cái)?shù)量可能是為隨機(jī)森林配置的最重要的要素。通過“ colsample_bynode”參數(shù)進(jìn)行設(shè)置,該參數(shù)占輸入要素?cái)?shù)量(從0到1)的百分比。下面的示例探討了在每個(gè)分割點(diǎn)隨機(jī)選擇的特征數(shù)量對(duì)模型準(zhǔn)確性的影響。我們將嘗試從0.0到1.0的值以0.1的增量進(jìn)行嘗試,盡管我們期望低于0.2或0.3的值會(huì)產(chǎn)生良好或最佳的性能,因?yàn)檫@可以轉(zhuǎn)換為輸入要素?cái)?shù)量的平方根,這是常見的 啟發(fā)式。
          # explore xgboost random forest number of features effect on performance
          from numpy import mean
          from numpy import std
          from numpy import arange
          from sklearn.datasets import make_classification
          from sklearn.model_selection import cross_val_score
          from sklearn.model_selection import RepeatedStratifiedKFold
          from xgboost import XGBRFClassifier
          from matplotlib import pyplot
           
          # get the dataset
          def get_dataset():
           X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=7)
           return X, y
           
          # get a list of models to evaluate
          def get_models():
           models = dict()
           for v in arange(0.11.10.1):
            key = '%.1f' % v
            models[key] = XGBRFClassifier(n_estimators=100, subsample=0.9, colsample_bynode=v)
           return models
           
          # evaluate a give model using cross-validation
          def evaluate_model(model, X, y):
           # define the model evaluation procedure
           cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
           # evaluate the model
           scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)
           return scores
           
          # define dataset
          X, y = get_dataset()
          # get the models to evaluate
          models = get_models()
          # evaluate the models and store results
          results, names = list(), list()
          for name, model in models.items():
           # evaluate the model and collect the results
           scores = evaluate_model(model, X, y)
           # store the results
           results.append(scores)
           names.append(name)
           # summarize performance along the way
           print('>%s %.3f (%.3f)' % (name, mean(scores), std(scores)))
          # plot model performance for comparison
          pyplot.boxplot(results, labels=names, showmeans=True)
          pyplot.show()
          首先運(yùn)行示例將報(bào)告每種功能集大小的平均準(zhǔn)確性。
          注意:由于算法或評(píng)估程序的隨機(jī)性,或者數(shù)值精度的差異,您的結(jié)果可能會(huì)有所不同。考慮運(yùn)行該示例幾次并比較平均結(jié)果。
          在這種情況下,隨著集成成員使用更多輸入功能,我們可以看到平均模型性能下降的總體趨勢。
          結(jié)果表明,在這種情況下,建議值為0.2將是一個(gè)不錯(cuò)的選擇。
          >0.1 0.889 (0.032)
          >0.2 0.891 (0.036)
          >0.3 0.887 (0.032)
          >0.4 0.886 (0.030)
          >0.5 0.878 (0.033)
          >0.6 0.874 (0.031)
          >0.7 0.869 (0.027)
          >0.8 0.867 (0.027)
          >0.9 0.856 (0.023)
          >1.0 0.846 (0.027)
          創(chuàng)建箱須圖以分配每種功能集大小的準(zhǔn)確性得分。
          我們可以看到性能的趨勢隨著決策樹考慮的功能數(shù)量的減少而降低。


          者:沂水寒城,CSDN博客專家,個(gè)人研究方向:機(jī)器學(xué)習(xí)、深度學(xué)習(xí)、NLP、CV

          Blog: http://yishuihancheng.blog.csdn.net


          贊 賞 作 者



          更多閱讀



          用 XGBoost 進(jìn)行時(shí)間序列預(yù)測


          5分鐘掌握 Python 隨機(jī)爬山算法


          5分鐘完全讀懂關(guān)聯(lián)規(guī)則挖掘算法

          特別推薦




          點(diǎn)擊下方閱讀原文加入社區(qū)會(huì)員

          瀏覽 108
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  综合久久狼人 | 久久在线播放 | 久久三级影院 | 操逼福利 | 日本中文乱伦字幕 |