玩轉(zhuǎn)Scikit-learn】機(jī)器學(xué)習(xí)工程師的淺入深出保姆級學(xué)習(xí)成長指南+變強(qiáng)規(guī)劃+入門教程~

      網(wǎng)友投稿 867 2025-03-31

      寫在前面

      為什么會(huì)想寫這個(gè)系列呢?

      首先,是在基礎(chǔ)應(yīng)用、數(shù)據(jù)分析、預(yù)測數(shù)據(jù)等上,scikit-learn算是比較簡單和高效的一個(gè)科學(xué)工具庫了。其次,科學(xué)庫是開源的,相當(dāng)?shù)挠押茫蚁嘈盼磥硪欢ㄊ菍儆陂_放、自由、共享的,同時(shí)也是不忘這個(gè)初心吧。

      想要寫什么內(nèi)容?

      主要還是以核心算法,各種基礎(chǔ)為切入點(diǎn),以最簡單明了的方法去總結(jié)、分享和解讀一些相關(guān)的知識(shí)原理。同時(shí),輔以scikit-learn庫進(jìn)行應(yīng)用與實(shí)戰(zhàn)解讀。

      主要用到什么工具呢?

      工具就PyCharm或者VScode,亦或者你熟悉的編輯器即可。

      需要哪些基礎(chǔ)呢?

      需要有一定的編程基礎(chǔ),對Python熟悉,具備一定的數(shù)學(xué)功底,線性代數(shù)、高等數(shù)學(xué)、矩陣?yán)碚摗⒆顑?yōu)化理論和方法等知識(shí)功底。

      Scikit-learn是一個(gè)支持有監(jiān)督和無監(jiān)督學(xué)習(xí)的開源機(jī)器學(xué)習(xí)庫。它還提供用于模型擬合、數(shù)據(jù)預(yù)處理、模型選擇、模型評估和許多其他實(shí)用程序的各種工具。

      學(xué)習(xí)指南

      主要就按照scikit-learn的庫包含的大部分內(nèi)容進(jìn)行講解,六大塊:分類(Classification)、回歸(Regression)、聚類(Clustering)、降維(Dimensionality reduction)、模型選擇(Model selection)和預(yù)處理(Preprocessing)。

      變強(qiáng)規(guī)劃

      每天完成一個(gè)小節(jié)的學(xué)習(xí),博主也每天堅(jiān)持更新一章(節(jié)假日或特殊情況除外),多練習(xí)多結(jié)合實(shí)際,公開數(shù)據(jù)集很多,可以嘗試很多公開數(shù)據(jù)集,后面更新一期公開數(shù)據(jù)集的合集吧,用于做測試和訓(xùn)練。

      說是變強(qiáng)規(guī)劃,其實(shí)要變強(qiáng),終究還是得靠——勤,多練習(xí)多思考,才會(huì)變強(qiáng)!

      “變強(qiáng)沒有捷徑!” —— 府學(xué)路18號車神

      入門scikit-learn

      官方規(guī)劃圖:

      https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html

      scikit-learn安裝

      有多種安裝 scikit-learn 的方法(官方安裝方法):

      安裝最新的官方版本。對于大多數(shù)用戶來說,這是最好的方法。它將提供一個(gè)穩(wěn)定的版本,并且預(yù)構(gòu)建的包可用于大多數(shù)平臺(tái)。

      安裝 操作系統(tǒng)或 Python 發(fā)行版提供的 scikit-learn 版本。對于那些擁有分發(fā) scikit-learn 的操作系統(tǒng)或 Python 發(fā)行版的人來說,這是一個(gè)快速的選擇。它可能不提供最新的發(fā)布版本。

      從源代碼構(gòu)建包。這對于想要最新最好的功能并且不怕運(yùn)行全新代碼的用戶來說是最好的。希望為項(xiàng)目做出貢獻(xiàn)的用戶也需要這樣做。

      上面的方法都太繁瑣,反手就是一個(gè)否定。

      建議直接在你最熟悉的編輯器,如PyCharm、VScode等的終端命令行,直接pip安裝,高效又方便:

      pip install - U scikit-learn

      對于不同系統(tǒng)的安裝方法類似,具體可參考官網(wǎng)上的安裝教程。

      scikit-learn優(yōu)點(diǎn)

      用于預(yù)測數(shù)據(jù)分析的簡單高效工具

      每個(gè)人都可以訪問,并且可以在各種情況下重復(fù)使用

      基于 NumPy、SciPy 和 matplotlib 構(gòu)建

      開源,商業(yè)可用 - BSD 許可證

      最重要的是開源!!!

      擬合與預(yù)測:估計(jì)器基礎(chǔ)(Fitting and predicting: estimator basics)

      Scikit-learn是一個(gè)支持有監(jiān)督和無監(jiān)督學(xué)習(xí)的開源機(jī)器學(xué)習(xí)庫。它還提供用于模型擬合、數(shù)據(jù)預(yù)處理、模型選擇、模型評估和許多其他實(shí)用程序的各種工具。

      Scikit-learn提供了數(shù)十種內(nèi)置的機(jī)器學(xué)習(xí)算法和模型,稱為估計(jì)器。每個(gè)估計(jì)器都可以使用其擬合方法擬合某些數(shù)據(jù)。

      下面以一個(gè)示例展開,這是一個(gè)簡單的示例,我們將 a 擬合 RandomForestClassifier到一些非常基本的數(shù)據(jù):

      >>> from sklearn.ensemble import RandomForestClassifier # 導(dǎo)入科學(xué)庫隨機(jī)森林 >>> clf = RandomForestClassifier(random_state=0) >>> X = [[ 1, 2, 3], # 2 samples, 3 features ... [11, 12, 13]] >>> y = [0, 1] # classes of each sample >>> clf.fit(X, y) > RandomForestClassifier(random_state=0)

      fit方法(擬合)通常接受 2 個(gè)輸入:

      樣本矩陣(或設(shè)計(jì)矩陣)X。的大小X 通常為,這意味著樣本表示為行,特征表示為列。(n_samples, n_features)

      目標(biāo)值y是回歸任務(wù)的實(shí)數(shù),或分類的整數(shù)(或任何其他離散值集)。對于無監(jiān)督學(xué)習(xí)任務(wù),y不需要指定。y通常是一維數(shù)組,其中第ith 條目對應(yīng)于 的 i第 th 樣本(行)的目標(biāo)X。

      其中,兩者X和y通常都應(yīng)該是 numpy 數(shù)組或等效 的類似數(shù)組的數(shù)據(jù)類型,盡管一些估計(jì)器可以使用其他格式,例如稀疏矩陣。

      一旦擬合了估計(jì)器,它就可以用于預(yù)測新數(shù)據(jù)的目標(biāo)值。您無需重新訓(xùn)練估算器:

      # 預(yù)測訓(xùn)練數(shù)據(jù)的類別 clf.predict(X) # array([0, 1]),結(jié)果是兩類 # 下面是預(yù)測新的數(shù)據(jù) clf.predict(([4,5,6], [13,14,15])) # 結(jié)果為:array([0, 1]),同樣也是兩類

      轉(zhuǎn)換器和預(yù)處理(Transformers and pre-processors)

      機(jī)器學(xué)習(xí)工作流程通常由不同的部分組成。一個(gè)典型的管道包括一個(gè)轉(zhuǎn)換或估算數(shù)據(jù)的預(yù)處理步驟,以及一個(gè)預(yù)測目標(biāo)值的最終預(yù)測器。

      在scikit-learn中,預(yù)處理器和轉(zhuǎn)換器遵循與估計(jì)器對象相同的 API(它們實(shí)際上都繼承自同一個(gè) BaseEstimator類)。轉(zhuǎn)換器對象沒有預(yù)測方法,而是輸出新轉(zhuǎn)換的樣本矩陣的轉(zhuǎn)換X方法:

      首先導(dǎo)入庫:

      from sklearn.preprocessing import StandardScaler

      輸入數(shù)據(jù)集

      X = [[0, 15], [1, -10]]

      根據(jù)計(jì)算的縮放值縮放數(shù)據(jù)

      StandardScaler().fit(X).transform(X) """ 結(jié)果為: array([[-1., 1.], [ 1., -1.]]) """

      數(shù)據(jù)集加載工具

      scikit-learn提供了很多很多的開源數(shù)據(jù)集,可以供所有人使用。

      https://scikit-learn.org/stable/datasets.html#datasets

      該軟件包還具有幫助程序來獲取機(jī)器學(xué)習(xí)社區(qū)常用的更大數(shù)據(jù)集,以對來自“現(xiàn)實(shí)世界”的數(shù)據(jù)的算法進(jìn)行基準(zhǔn)測試。

      n_samples為了評估數(shù)據(jù)集 (和 )規(guī)模的影響,n_features同時(shí)控制數(shù)據(jù)的統(tǒng)計(jì)屬性(通常是特征的相關(guān)性和信息量),還可以生成合成數(shù)據(jù)。

      主要有以下幾類:

      通用數(shù)據(jù)集 API——根據(jù)所需的數(shù)據(jù)集類型,可以使用三種主要類型的數(shù)據(jù)集接口來獲取數(shù)據(jù)集。

      數(shù)據(jù)集加載器——它們可用于加載小型標(biāo)準(zhǔn)數(shù)據(jù)集,如玩具數(shù)據(jù)集部分所述。

      數(shù)據(jù)集提取器——它們可用于下載和加載更大的數(shù)據(jù)集,如真實(shí)世界數(shù)據(jù)集部分所述。

      loader 和 fetchers 函數(shù)都返回一個(gè)Bunch 包含至少兩個(gè)項(xiàng)目的對象:一個(gè)帶有 key的 shape n_samples*數(shù)組(20newsgroups 除外)和一個(gè) length 的 numpy 數(shù)組,包含目標(biāo)值,帶有 key 。n_featuresdatan_samplestarget

      Bunch 對象是一個(gè)將其鍵作為屬性公開的字典。有關(guān) Bunch 對象的更多信息,請參閱Bunch。

      【玩轉(zhuǎn)Scikit-learn】機(jī)器學(xué)習(xí)工程師的淺入深出保姆級學(xué)習(xí)成長指南+變強(qiáng)規(guī)劃+入門教程~

      通過將 return_X_y參數(shù)設(shè)置為 ,幾乎所有這些函數(shù)都可以將輸出限制為僅包含數(shù)據(jù)和目標(biāo)的元組True。

      DESCR數(shù)據(jù)集的屬性中還包含完整的描述,有些包含feature_names和target_names。有關(guān)詳細(xì)信息,請參閱下面的數(shù)據(jù)集描述。

      數(shù)據(jù)集生成函數(shù)——它們可用于生成受控合成數(shù)據(jù)集,如生成的數(shù)據(jù)集部分所述。

      這些函數(shù)返回一個(gè)由* numpy 數(shù)組和 包含目標(biāo)的長度數(shù)組組成的元組。(X, y)n_samplesn_featuresXn_samplesy

      此外,還有其他工具可以加載其他格式的數(shù)據(jù)集或從其他位置加載,如加載其他數(shù)據(jù)集 部分所述。

      sklearn內(nèi)置了一些優(yōu)秀的數(shù)據(jù)集,比如:Iris數(shù)據(jù)、房價(jià)數(shù)據(jù)、泰坦尼克數(shù)據(jù)等。

      Iris數(shù)據(jù)集示例

      例舉一個(gè)鳶尾花數(shù)據(jù)集的范例,下面是導(dǎo)入數(shù)據(jù)集:

      著名的 Iris 數(shù)據(jù)庫,最初由 RA Fisher 爵士使用。數(shù)據(jù)集取自 Fisher 的論文。請注意,它與 R 中的相同,但與 UCI 機(jī)器學(xué)習(xí)存儲(chǔ)庫中的不同,后者有兩個(gè)錯(cuò)誤的數(shù)據(jù)點(diǎn)。

      這可能是模式識(shí)別文獻(xiàn)中最著名的數(shù)據(jù)庫。Fisher 的論文是該領(lǐng)域的經(jīng)典之作,至今仍被頻繁引用。(例如,參見 Duda & Hart。)數(shù)據(jù)集包含 3 個(gè)類別,每個(gè)類別 50 個(gè)實(shí)例,其中每個(gè)類別指的是一種鳶尾植物。一類與另一類線性可分;后者不能彼此線性分離。

      import pandas as pd import numpy as np import sklearn from sklearn import datasets # 導(dǎo)入數(shù)據(jù)集

      鳶尾花數(shù)據(jù)集Iris

      # iris數(shù)據(jù) iris = datasets.load_iris() type(iris) sklearn.utils.Bunch

      下面看一下Iris數(shù)據(jù)集到底長什么樣子。

      注意,可以將上面的數(shù)據(jù)生成我們想看到的DataFrame,還可以添加因變量:

      其余的數(shù)據(jù)集也類似,值得關(guān)注的有以下幾個(gè)屬性(你需要記住的):

      data

      target、target_names

      feature_names

      filename

      三種方式生成數(shù)據(jù)

      方法一

      # 導(dǎo)入庫 from sklearn import datasets loaded_data = datasets.load_iris() # 導(dǎo)入數(shù)據(jù)集的屬性 #導(dǎo)入樣本數(shù)據(jù) data_X = loaded_data.data # 導(dǎo)入標(biāo)簽 data_y = loaded_data.target

      方法二

      # 導(dǎo)入庫 from sklearn.datasets import load_iris # 直接返回 data_X, data_y = load_iris(return_X_y=True)

      方法三

      # 導(dǎo)入庫 from sklearn.datasets import load_iris data = load_iris() #導(dǎo)入數(shù)據(jù)和標(biāo)簽 data_X = data.data data_y = data.target

      總而言之,道理都一樣。

      數(shù)據(jù)集使用方法匯總(以波士頓房價(jià)數(shù)據(jù)集為例)

      from sklearn import datasets # 導(dǎo)入庫 boston = datasets.load_boston() # 導(dǎo)入波士頓房價(jià)數(shù)據(jù) print(boston.keys()) # 查看鍵(屬性) ['data','target','feature_names','DESCR', 'filename'] print(boston.data.shape,boston.target.shape) # 查看數(shù)據(jù)的形狀 print(boston.feature_names) # 查看有哪些特征 print(boston.DESCR) # described 數(shù)據(jù)集描述信息 print(boston.filename) # 文件路徑

      預(yù)處理器和估計(jì)器(Pipelines: chaining pre-processors and estimators)

      變換器和估計(jì)器(預(yù)測器)可以組合在一起成為一個(gè)統(tǒng)一的對象:a Pipeline. fit該管道提供與常規(guī)估計(jì)器相同的 API:它可以通過和擬合并用于預(yù)測predict。正如我們稍后將看到的,使用管道還可以防止數(shù)據(jù)泄漏,即在訓(xùn)練數(shù)據(jù)中泄露一些測試數(shù)據(jù)。

      在以下示例中,我們加載 Iris 數(shù)據(jù)集,將其拆分為訓(xùn)練集和測試集,并計(jì)算管道在測試數(shù)據(jù)上的準(zhǔn)確度得分:

      導(dǎo)入庫

      from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.pipeline import make_pipeline from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score

      創(chuàng)建pipeline

      pipe = make_pipeline( StandardScaler(), LogisticRegression() )

      加載iris數(shù)據(jù)集,并將其拆分為訓(xùn)練集和測試集

      X, y = load_iris(return_X_y=True) X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

      擬合

      pipe.fit(X_train, y_train)

      可使用估計(jì)器做預(yù)測、分類等

      accuracy_score(pipe.predict(X_test), y_test)

      代碼匯總:

      from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.pipeline import make_pipeline from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # create a pipeline object pipe = make_pipeline( StandardScaler(), LogisticRegression() ) # load the iris dataset and split it into train and test sets X, y = load_iris(return_X_y=True) X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0) # fit the whole pipeline pipe.fit(X_train, y_train) # we can now use it like any other estimator accuracy_score(pipe.predict(X_test), y_test)

      模型評估

      將模型擬合到某些數(shù)據(jù)并不意味著它可以很好地預(yù)測看不見的數(shù)據(jù)。這需要直接評估。我們剛剛看到了 train_test_split將數(shù)據(jù)集拆分為訓(xùn)練集和測試集的助手,但scikit-learn它提供了許多其他工具用于模型評估,特別是用于交叉驗(yàn)證。

      關(guān)于交叉驗(yàn)證:學(xué)習(xí)預(yù)測函數(shù)的參數(shù)并在相同的數(shù)據(jù)上對其進(jìn)行測試是一個(gè)方法論錯(cuò)誤:一個(gè)模型只會(huì)重復(fù)它剛剛看到的樣本的標(biāo)簽,它會(huì)獲得完美的分?jǐn)?shù),但無法預(yù)測任何有用的東西——看不見的數(shù)據(jù)。這種情況稱為過擬合。為了避免這種情況,在執(zhí)行(監(jiān)督)機(jī)器學(xué)習(xí)實(shí)驗(yàn)時(shí),通常的做法是保留部分可用數(shù)據(jù)作為測試集 。請注意,“實(shí)驗(yàn)”一詞并非僅表示學(xué)術(shù)用途,因?yàn)榧词乖谏虡I(yè)環(huán)境中,機(jī)器學(xué)習(xí)通常也是從實(shí)驗(yàn)開始的。這是模型訓(xùn)練中典型的交叉驗(yàn)證工作流程的流程圖。

      我們在這里簡要展示如何使用幫助程序執(zhí)行 5 折交叉驗(yàn)證過程cross_validate。請注意,也可以手動(dòng)迭代折疊,使用不同的數(shù)據(jù)拆分策略,以及使用自定義評分函數(shù)。

      導(dǎo)入庫

      from sklearn.datasets import make_regression from sklearn.linear_model import LinearRegression from sklearn.model_selection import cross_validate

      線性回歸

      X, y = make_regression(n_samples=1000, random_state=0) lr = LinearRegression()

      交叉驗(yàn)證

      result = cross_validate(lr, X, y) # defaults to 5-fold CV result['test_score'] # r_squared score is high because dataset is easy

      代碼匯總:

      from sklearn.datasets import make_regression from sklearn.linear_model import LinearRegression from sklearn.model_selection import cross_validate X, y = make_regression(n_samples=1000, random_state=0) lr = LinearRegression() result = cross_validate(lr, X, y) # defaults to 5-fold CV result['test_score'] # r_squared score is high because dataset is easy

      自動(dòng)參數(shù)搜索

      所有估計(jì)器都有可以調(diào)整的參數(shù)(在文獻(xiàn)中通常稱為超參數(shù))。估計(jì)器的泛化能力通常主要取決于幾個(gè)參數(shù)。例如 a RandomForestRegressor有一個(gè)n_estimators 參數(shù)決定了森林中的樹的數(shù)量,還有一個(gè) max_depth參數(shù)決定了每棵樹的最大深度。很多時(shí)候,不清楚這些參數(shù)的確切值應(yīng)該是多少,因?yàn)樗鼈內(nèi)Q于手頭的數(shù)據(jù)。

      Scikit-learn提供自動(dòng)查找最佳參數(shù)組合的工具(通過交叉驗(yàn)證)。在下面的示例中,我們隨機(jī)搜索帶有 RandomizedSearchCV對象的隨機(jī)森林的參數(shù)空間。當(dāng)搜索結(jié)束時(shí),它的RandomizedSearchCV行為就像RandomForestRegressor已經(jīng)安裝了最好的參數(shù)集。

      導(dǎo)入庫

      from sklearn.datasets import fetch_california_housing from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import RandomizedSearchCV from sklearn.model_selection import train_test_split from scipy.stats import randint

      獲取數(shù)據(jù)集

      X, y = fetch_california_housing(return_X_y=True) X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

      定義將要搜索的參數(shù)空間

      # define the parameter space that will be searched over param_distributions = {'n_estimators': randint(1, 5), 'max_depth': randint(5, 10)}

      現(xiàn)在創(chuàng)建一個(gè)searchCV對象,并使其擬合數(shù)據(jù)

      search = RandomizedSearchCV(estimator=RandomForestRegressor(random_state=0), n_iter=5, param_distributions=param_distributions, random_state=0) search.fit(X_train, y_train)

      搜索對象現(xiàn)在就像一個(gè)普通的隨機(jī)森林估計(jì)器

      search.best_params_ # the search object now acts like a normal random forest estimator # with max_depth=9 and n_estimators=4 search.score(X_test, y_test)

      代碼匯總:

      from sklearn.datasets import fetch_california_housing from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import RandomizedSearchCV from sklearn.model_selection import train_test_split from scipy.stats import randint X, y = fetch_california_housing(return_X_y=True) X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0) # define the parameter space that will be searched over param_distributions = {'n_estimators': randint(1, 5), 'max_depth': randint(5, 10)} # now create a searchCV object and fit it to the data search = RandomizedSearchCV(estimator=RandomForestRegressor(random_state=0), n_iter=5, param_distributions=param_distributions, random_state=0) search.fit(X_train, y_train) search.best_params_ # the search object now acts like a normal random forest estimator # with max_depth=9 and n_estimators=4 search.score(X_test, y_test)

      Next Step!

      好了,入門就到此為止,后續(xù)還好繼續(xù)更新Scikit-learn的相關(guān)基礎(chǔ)攻略,從最簡單的公開數(shù)據(jù)集入手,理解每一個(gè)算法的核心,結(jié)合scikit-learn的科學(xué)工具,一起學(xué)起來!~

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Excel中如何打印指定的行即把自己需要的行快速打印出來(excel怎么打印指定行)
      下一篇:Excel N合一圖表
      相關(guān)文章
      国产午夜亚洲精品午夜鲁丝片| 亚洲熟妇无码另类久久久| 亚洲国产成人久久一区WWW| 亚洲人成在线播放| 亚洲AV乱码久久精品蜜桃| 日本亚洲欧洲免费天堂午夜看片女人员| 亚洲精品老司机在线观看| 国产精品亚洲AV三区| 亚洲精品色播一区二区| 亚洲日韩中文字幕无码一区| 美女视频黄免费亚洲| 亚洲中文字幕精品久久| 亚洲中文无码亚洲人成影院| 亚洲色成人网站WWW永久四虎 | 亚洲成a人片在线观看久| 男人的天堂av亚洲一区2区| 在线亚洲高清揄拍自拍一品区| 亚洲无人区码一二三码区别图片| 亚洲人成无码网站在线观看| 久久亚洲中文无码咪咪爱| 国产偷国产偷亚洲高清在线| 亚洲精品一级无码中文字幕| 国产av无码专区亚洲国产精品| 亚洲国产天堂久久综合| 中文字幕亚洲不卡在线亚瑟| 亚洲成av人片天堂网| 爱爱帝国亚洲一区二区三区| 自怕偷自怕亚洲精品| 亚洲第一成年网站大全亚洲| 亚洲国产精品综合久久2007| 亚洲jizzjizz在线播放久| 亚洲日韩乱码中文字幕| 国产精品亚洲二区在线| 国产gv天堂亚洲国产gv刚刚碰 | 亚洲AV综合色区无码一区爱AV| 午夜亚洲AV日韩AV无码大全| 亚洲白色白色永久观看| 亚洲一区二区三区高清在线观看| 亚洲av成人无码网站…| 亚洲中文字幕丝袜制服一区| 亚洲AV一宅男色影视|