国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Scikit中的特征選擇,XGboost進(jìn)行回歸預(yù)測(cè),模型優(yōu)化的實(shí)戰(zhàn)

SegmentFault / 2710人閱讀

摘要:本次數(shù)據(jù)練習(xí)的目的是根據(jù)球員的各項(xiàng)信息和能力值來(lái)預(yù)測(cè)該球員的市場(chǎng)價(jià)值。根據(jù)以上描述,我們很容易可以判斷出這是一個(gè)回歸預(yù)測(cè)類的問題。不過(guò)這也在預(yù)料之中,因?yàn)槲一緵]有進(jìn)行特征處理。

前天偶然在一個(gè)網(wǎng)站上看到一個(gè)數(shù)據(jù)分析的比賽(sofasofa),自己雖然學(xué)習(xí)一些關(guān)于機(jī)器學(xué)習(xí)的內(nèi)容,但是并沒有在比賽中實(shí)踐過(guò),于是我?guī)е环N好奇心參加了這次比賽。

賽題:足球運(yùn)動(dòng)員身價(jià)估計(jì)

比賽概述

本比賽為個(gè)人練習(xí)賽,主要針對(duì)于于數(shù)據(jù)新人進(jìn)行自我練習(xí)、自我提高,與大家切磋。

練習(xí)賽時(shí)限:2018-03-05 至 2020-03-05

任務(wù)類型:回歸

背景介紹: 每個(gè)足球運(yùn)動(dòng)員在轉(zhuǎn)會(huì)市場(chǎng)都有各自的價(jià)碼。本次數(shù)據(jù)練習(xí)的目的是根據(jù)球員的各項(xiàng)信息和能力值來(lái)預(yù)測(cè)該球員的市場(chǎng)價(jià)值。

根據(jù)以上描述,我們很容易可以判斷出這是一個(gè)回歸預(yù)測(cè)類的問題。當(dāng)然,要想進(jìn)行預(yù)測(cè),我們首先要做的就是先看看數(shù)據(jù)的格式以及內(nèi)容(由于參數(shù)太多,我就不一一列舉了,大家可以直接去網(wǎng)上看,下面我簡(jiǎn)單貼個(gè)圖):

簡(jiǎn)單了解了數(shù)據(jù)的格式以及大小以后,由于沒有實(shí)踐經(jīng)驗(yàn),我就憑自己的感覺,單純的認(rèn)為一下幾個(gè)字段可能是最重要的:

字段 含義
club 該球員所屬的俱樂部。該信息已經(jīng)被編碼。
league 該球員所在的聯(lián)賽。已被編碼。
potential 球員的潛力。數(shù)值變量。
international_reputation 國(guó)際知名度。數(shù)值變量。

巧合的是剛好這些字段都沒有缺失值,我很開心啊,心想著可以直接利用XGBoost模型進(jìn)行預(yù)測(cè)了。具體XGBoost的使用方法,可以參考:XGBoost以及官方文檔XGBoost Parameters。說(shuō)來(lái)就來(lái),我開始了coding工作,下面就貼出我的第一版代碼:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File  : soccer_value.py
# @Author: Huangqinjian
# @Date  : 2018/3/22
# @Desc  :

import pandas as pd
import matplotlib.pyplot as plt
import xgboost as xgb
import numpy as np
from xgboost import plot_importance
from sklearn.preprocessing import Imputer


def loadDataset(filePath):
    df = pd.read_csv(filepath_or_buffer=filePath)
    return df


def featureSet(data):
    data_num = len(data)
    XList = []
    for row in range(0, data_num):
        tmp_list = []
        tmp_list.append(data.iloc[row]["club"])
        tmp_list.append(data.iloc[row]["league"])
        tmp_list.append(data.iloc[row]["potential"])
        tmp_list.append(data.iloc[row]["international_reputation"])
        XList.append(tmp_list)
    yList = data.y.values
    return XList, yList


def loadTestData(filePath):
    data = pd.read_csv(filepath_or_buffer=filePath)
    data_num = len(data)
    XList = []
    for row in range(0, data_num):
        tmp_list = []
        tmp_list.append(data.iloc[row]["club"])
        tmp_list.append(data.iloc[row]["league"])
        tmp_list.append(data.iloc[row]["potential"])
        tmp_list.append(data.iloc[row]["international_reputation"])
        XList.append(tmp_list)
    return XList


def trainandTest(X_train, y_train, X_test):
    # XGBoost訓(xùn)練過(guò)程
    model = xgb.XGBRegressor(max_depth=5, learning_rate=0.1, n_estimators=160, silent=False, objective="reg:gamma")
    model.fit(X_train, y_train)

    # 對(duì)測(cè)試集進(jìn)行預(yù)測(cè)
    ans = model.predict(X_test)

    ans_len = len(ans)
    id_list = np.arange(10441, 17441)
    data_arr = []
    for row in range(0, ans_len):
        data_arr.append([int(id_list[row]), ans[row]])
    np_data = np.array(data_arr)

    # 寫入文件
    pd_data = pd.DataFrame(np_data, columns=["id", "y"])
    # print(pd_data)
    pd_data.to_csv("submit.csv", index=None)

    # 顯示重要特征
    # plot_importance(model)
    # plt.show()

if __name__ == "__main__":
    trainFilePath = "dataset/soccer/train.csv"
    testFilePath = "dataset/soccer/test.csv"
    data = loadDataset(trainFilePath)
    X_train, y_train = featureSet(data)
    X_test = loadTestData(testFilePath)
    trainandTest(X_train, y_train, X_test)

然后我就把得到的結(jié)果文件submit.csv提交到網(wǎng)站上,看了結(jié)果,MAE為106.6977,排名24/28,很不理想。不過(guò)這也在預(yù)料之中,因?yàn)槲一緵]有進(jìn)行特征處理。

我當(dāng)然不滿意啦,一直想著怎么能提高準(zhǔn)確率呢?后來(lái)就想到了可以利用一下scikit這個(gè)庫(kù)啊!在scikit中包含了一個(gè)特征選擇的模塊sklearn.feature_selection,而在這個(gè)模塊下面有以下幾個(gè)方法:

Removing features with low variance(剔除低方差的特征)

Univariate feature selection(單變量特征選擇)

Recursive feature elimination(遞歸功能消除)

Feature selection using SelectFromModel(使用SelectFromModel進(jìn)行特征選擇)

我首先想到的是利用單變量特征選擇的方法選出幾個(gè)跟預(yù)測(cè)結(jié)果最相關(guān)的特征。根據(jù)官方文檔,有以下幾種得分函數(shù)來(lái)檢驗(yàn)變量之間的依賴程度:

對(duì)于回歸問題: f_regression, mutual_info_regression

對(duì)于分類問題: chi2, f_classif, mutual_info_classif

由于這個(gè)比賽是一個(gè)回歸預(yù)測(cè)問題,所以我選擇了f_regression這個(gè)得分函數(shù)(剛開始我沒有注意,錯(cuò)誤使用了分類問題中的得分函數(shù)chi2,導(dǎo)致程序一直報(bào)錯(cuò)!心很累~)

f_regression的參數(shù):

sklearn.feature_selection.f_regression(X, y, center=True)
X:一個(gè)多維數(shù)組,大小為(n_samples, n_features),即行數(shù)為訓(xùn)練樣本的大小,列數(shù)為特征的個(gè)數(shù)
y:一個(gè)一維數(shù)組,長(zhǎng)度為訓(xùn)練樣本的大小
return:返回值為特征的F值以及p值

不過(guò)在進(jìn)行這個(gè)操作之前,我們還有一個(gè)重大的任務(wù)要完成,那就是對(duì)于空值的處理!幸運(yùn)的是scikit中也有專門的模塊可以處理這個(gè)問題:Imputation of missing values

sklearn.preprocessing.Imputer的參數(shù):
sklearn.preprocessing.Imputer(missing_values=’NaN’, strategy=’mean’, axis=0, verbose=0, copy=True)

其中strategy代表對(duì)于空值的填充策略(默認(rèn)為mean,即取所在列的平均數(shù)進(jìn)行填充):

strategy="median",代表取所在列的中位數(shù)進(jìn)行填充

strategy="most_frequent", 代表取所在列的眾數(shù)進(jìn)行填充

axis默認(rèn)值為0:

axis=0,代表按列進(jìn)行填充

axis=1,代表按行進(jìn)行填充

其他具體參數(shù)可以參考:sklearn.preprocessing.Imputer

根據(jù)以上,我對(duì)數(shù)據(jù)進(jìn)行了一些處理:

from sklearn.feature_selection import f_regression
from sklearn.preprocessing import Imputer

imputer = Imputer(missing_values="NaN", strategy="mean", axis=0)
imputer.fit(data.loc[:, "rw":"lb"])
x_new = imputer.transform(data.loc[:, "rw":"lb"])
data_num = len(x_new)
XList = []
yList = []
for row in range(0, data_num):
    tmp_list = []
    tmp_list.append(x_new[row][0])
    tmp_list.append(x_new[row][1])
    tmp_list.append(x_new[row][2])
    tmp_list.append(x_new[row][3])
    tmp_list.append(x_new[row][4])
    tmp_list.append(x_new[row][5])
    tmp_list.append(x_new[row][6])
    tmp_list.append(x_new[row][7])
    tmp_list.append(x_new[row][8])
    tmp_list.append(x_new[row][9])
    XList.append(tmp_list)
    yList.append(data.iloc[row]["y"])

F = f_regression(XList, yList)
print(len(F))
print(F)

測(cè)試結(jié)果:

2
(array([2531.07587725, 1166.63303449, 2891.97789543, 2531.07587725,
       2786.75491791, 2891.62686404, 3682.42649607, 1394.46743196,
        531.08672792, 1166.63303449]), array([0.00000000e+000, 1.74675421e-242, 0.00000000e+000, 0.00000000e+000,
       0.00000000e+000, 0.00000000e+000, 0.00000000e+000, 1.37584507e-286,
       1.15614152e-114, 1.74675421e-242]))

根據(jù)以上得到的結(jié)果,我選取了rw,st,lw,cf,cam,cm(選取F值相對(duì)大的)幾個(gè)特征加入模型之中。以下是我改進(jìn)后的代碼:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File  : soccer_value.py
# @Author: Huangqinjian
# @Date  : 2018/3/22
# @Desc  :

import pandas as pd
import matplotlib.pyplot as plt
import xgboost as xgb
import numpy as np
from xgboost import plot_importance
from sklearn.preprocessing import Imputer


def loadDataset(filePath):
    df = pd.read_csv(filepath_or_buffer=filePath)
    return df


def featureSet(data):
    imputer = Imputer(missing_values="NaN", strategy="mean", axis=0)
    imputer.fit(data.loc[:, ["rw", "st", "lw", "cf", "cam", "cm"]])
    x_new = imputer.transform(data.loc[:, ["rw", "st", "lw", "cf", "cam", "cm"]])
    data_num = len(data)
    XList = []
    for row in range(0, data_num):
        tmp_list = []
        tmp_list.append(data.iloc[row]["club"])
        tmp_list.append(data.iloc[row]["league"])
        tmp_list.append(data.iloc[row]["potential"])
        tmp_list.append(data.iloc[row]["international_reputation"])
        tmp_list.append(data.iloc[row]["pac"])
        tmp_list.append(data.iloc[row]["sho"])
        tmp_list.append(data.iloc[row]["pas"])
        tmp_list.append(data.iloc[row]["dri"])
        tmp_list.append(data.iloc[row]["def"])
        tmp_list.append(data.iloc[row]["phy"])
        tmp_list.append(data.iloc[row]["skill_moves"])
        tmp_list.append(x_new[row][0])
        tmp_list.append(x_new[row][1])
        tmp_list.append(x_new[row][2])
        tmp_list.append(x_new[row][3])
        tmp_list.append(x_new[row][4])
        tmp_list.append(x_new[row][5])
        XList.append(tmp_list)
    yList = data.y.values
    return XList, yList


def loadTestData(filePath):
    data = pd.read_csv(filepath_or_buffer=filePath)
    imputer = Imputer(missing_values="NaN", strategy="mean", axis=0)
    imputer.fit(data.loc[:, ["rw", "st", "lw", "cf", "cam", "cm"]])
    x_new = imputer.transform(data.loc[:, ["rw", "st", "lw", "cf", "cam", "cm"]])
    data_num = len(data)
    XList = []
    for row in range(0, data_num):
        tmp_list = []
        tmp_list.append(data.iloc[row]["club"])
        tmp_list.append(data.iloc[row]["league"])
        tmp_list.append(data.iloc[row]["potential"])
        tmp_list.append(data.iloc[row]["international_reputation"])
        tmp_list.append(data.iloc[row]["pac"])
        tmp_list.append(data.iloc[row]["sho"])
        tmp_list.append(data.iloc[row]["pas"])
        tmp_list.append(data.iloc[row]["dri"])
        tmp_list.append(data.iloc[row]["def"])
        tmp_list.append(data.iloc[row]["phy"])
        tmp_list.append(data.iloc[row]["skill_moves"])
        tmp_list.append(x_new[row][0])
        tmp_list.append(x_new[row][1])
        tmp_list.append(x_new[row][2])
        tmp_list.append(x_new[row][3])
        tmp_list.append(x_new[row][4])
        tmp_list.append(x_new[row][5])
        XList.append(tmp_list)
    return XList


def trainandTest(X_train, y_train, X_test):
    # XGBoost訓(xùn)練過(guò)程
    model = xgb.XGBRegressor(max_depth=5, learning_rate=0.1, n_estimators=160, silent=False, objective="reg:gamma")
    model.fit(X_train, y_train)

    # 對(duì)測(cè)試集進(jìn)行預(yù)測(cè)
    ans = model.predict(X_test)

    ans_len = len(ans)
    id_list = np.arange(10441, 17441)
    data_arr = []
    for row in range(0, ans_len):
        data_arr.append([int(id_list[row]), ans[row]])
    np_data = np.array(data_arr)

    # 寫入文件
    pd_data = pd.DataFrame(np_data, columns=["id", "y"])
    # print(pd_data)
    pd_data.to_csv("submit.csv", index=None)

    # 顯示重要特征
    # plot_importance(model)
    # plt.show()

if __name__ == "__main__":
    trainFilePath = "dataset/soccer/train.csv"
    testFilePath = "dataset/soccer/test.csv"
    data = loadDataset(trainFilePath)
    X_train, y_train = featureSet(data)
    X_test = loadTestData(testFilePath)
    trainandTest(X_train, y_train, X_test)

再次提交,這次MAE為 42.1227,排名16/28。雖然提升了不少,不過(guò)距離第一名還是有差距,仍需努力。

接下來(lái),我們來(lái)處理一下下面這個(gè)字段:

由于這兩個(gè)字段是標(biāo)簽,需要進(jìn)行處理以后(標(biāo)簽標(biāo)準(zhǔn)化)才用到模型中。我們要用到的函數(shù)是sklearn.preprocessing.LabelEncoder:

    le = preprocessing.LabelEncoder()
    le.fit(["Low", "Medium", "High"])
    att_label = le.transform(data.work_rate_att.values)
    # print(att_label)
    def_label = le.transform(data.work_rate_def.values)
    # print(def_label)

當(dāng)然你也可以使用pandas直接來(lái)處理離散型特征變量,具體內(nèi)容可以參考:pandas使用get_dummies進(jìn)行one-hot編碼。順帶提一句,scikit中也有一個(gè)方法可以來(lái)處理,可參考:sklearn.preprocessing.OneHotEncoder。

調(diào)整后的代碼:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File  : soccer_value.py
# @Author: Huangqinjian
# @Date  : 2018/3/22
# @Desc  :

import pandas as pd
import matplotlib.pyplot as plt
import xgboost as xgb
from sklearn import preprocessing
import numpy as np
from xgboost import plot_importance
from sklearn.preprocessing import Imputer
from sklearn.cross_validation import train_test_split


def featureSet(data):
    imputer = Imputer(missing_values="NaN", strategy="mean", axis=0)
    imputer.fit(data.loc[:, ["rw", "st", "lw", "cf", "cam", "cm"]])
    x_new = imputer.transform(data.loc[:, ["rw", "st", "lw", "cf", "cam", "cm"]])

    le = preprocessing.LabelEncoder()
    le.fit(["Low", "Medium", "High"])
    att_label = le.transform(data.work_rate_att.values)
    # print(att_label)
    def_label = le.transform(data.work_rate_def.values)
    # print(def_label)

    data_num = len(data)
    XList = []
    for row in range(0, data_num):
        tmp_list = []
        tmp_list.append(data.iloc[row]["club"])
        tmp_list.append(data.iloc[row]["league"])
        tmp_list.append(data.iloc[row]["potential"])
        tmp_list.append(data.iloc[row]["international_reputation"])
        tmp_list.append(data.iloc[row]["pac"])
        tmp_list.append(data.iloc[row]["sho"])
        tmp_list.append(data.iloc[row]["pas"])
        tmp_list.append(data.iloc[row]["dri"])
        tmp_list.append(data.iloc[row]["def"])
        tmp_list.append(data.iloc[row]["phy"])
        tmp_list.append(data.iloc[row]["skill_moves"])
        tmp_list.append(x_new[row][0])
        tmp_list.append(x_new[row][1])
        tmp_list.append(x_new[row][2])
        tmp_list.append(x_new[row][3])
        tmp_list.append(x_new[row][4])
        tmp_list.append(x_new[row][5])
        tmp_list.append(att_label[row])
        tmp_list.append(def_label[row])
        XList.append(tmp_list)
    yList = data.y.values
    return XList, yList


def loadTestData(filePath):
    data = pd.read_csv(filepath_or_buffer=filePath)
    imputer = Imputer(missing_values="NaN", strategy="mean", axis=0)
    imputer.fit(data.loc[:, ["rw", "st", "lw", "cf", "cam", "cm"]])
    x_new = imputer.transform(data.loc[:, ["rw", "st", "lw", "cf", "cam", "cm"]])

    le = preprocessing.LabelEncoder()
    le.fit(["Low", "Medium", "High"])
    att_label = le.transform(data.work_rate_att.values)
    # print(att_label)
    def_label = le.transform(data.work_rate_def.values)
    # print(def_label)

    data_num = len(data)
    XList = []
    for row in range(0, data_num):
        tmp_list = []
        tmp_list.append(data.iloc[row]["club"])
        tmp_list.append(data.iloc[row]["league"])
        tmp_list.append(data.iloc[row]["potential"])
        tmp_list.append(data.iloc[row]["international_reputation"])
        tmp_list.append(data.iloc[row]["pac"])
        tmp_list.append(data.iloc[row]["sho"])
        tmp_list.append(data.iloc[row]["pas"])
        tmp_list.append(data.iloc[row]["dri"])
        tmp_list.append(data.iloc[row]["def"])
        tmp_list.append(data.iloc[row]["phy"])
        tmp_list.append(data.iloc[row]["skill_moves"])
        tmp_list.append(x_new[row][0])
        tmp_list.append(x_new[row][1])
        tmp_list.append(x_new[row][2])
        tmp_list.append(x_new[row][3])
        tmp_list.append(x_new[row][4])
        tmp_list.append(x_new[row][5])
        tmp_list.append(att_label[row])
        tmp_list.append(def_label[row])
        XList.append(tmp_list)
    return XList


def trainandTest(X_train, y_train, X_test):
    # XGBoost訓(xùn)練過(guò)程
    model = xgb.XGBRegressor(max_depth=6, learning_rate=0.05, n_estimators=500, silent=False, objective="reg:gamma")
    model.fit(X_train, y_train)

    # 對(duì)測(cè)試集進(jìn)行預(yù)測(cè)
    ans = model.predict(X_test)

    ans_len = len(ans)
    id_list = np.arange(10441, 17441)
    data_arr = []
    for row in range(0, ans_len):
        data_arr.append([int(id_list[row]), ans[row]])
    np_data = np.array(data_arr)

    # 寫入文件
    pd_data = pd.DataFrame(np_data, columns=["id", "y"])
    # print(pd_data)
    pd_data.to_csv("submit.csv", index=None)

    # 顯示重要特征
    # plot_importance(model)
    # plt.show()

if __name__ == "__main__":
    trainFilePath = "dataset/soccer/train.csv"
    testFilePath = "dataset/soccer/test.csv"
    data = pd.read_csv(trainFilePath)
    X_train, y_train = featureSet(data)
    X_test = loadTestData(testFilePath)
    trainandTest(X_train, y_train, X_test)

這次只提高到了40.8686。暫時(shí)想不到提高的方法了,還請(qǐng)大神多多賜教!


更多內(nèi)容歡迎關(guān)注我的個(gè)人公眾號(hào)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/44678.html

相關(guān)文章

  • ApacheCN 人工智能知識(shí)樹 v1.0

    摘要:貢獻(xiàn)者飛龍版本最近總是有人問我,把這些資料看完一遍要用多長(zhǎng)時(shí)間,如果你一本書一本書看的話,的確要用很長(zhǎng)時(shí)間。為了方便大家,我就把每本書的章節(jié)拆開,再按照知識(shí)點(diǎn)合并,手動(dòng)整理了這個(gè)知識(shí)樹。 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 貢獻(xiàn)者:飛龍版...

    劉厚水 評(píng)論0 收藏0
  • XGboost數(shù)據(jù)比賽實(shí)戰(zhàn)之調(diào)參篇(完整流程)

    摘要:字符串函數(shù)名,或是可調(diào)用對(duì)象,需要其函數(shù)簽名形如如果是,則使用的誤差估計(jì)函數(shù)。運(yùn)行后的結(jié)果為每輪迭代運(yùn)行結(jié)果參數(shù)的最佳取值最佳模型得分由輸出結(jié)果可知參數(shù)的最佳取值。提醒一點(diǎn),這個(gè)分?jǐn)?shù)是根據(jù)前面設(shè)置的得分函數(shù)算出來(lái)的,即中的。 這一篇博客的內(nèi)容是在上一篇博客Scikit中的特征選擇,XGboost進(jìn)行回歸預(yù)測(cè),模型優(yōu)化的實(shí)戰(zhàn)的基礎(chǔ)上進(jìn)行調(diào)參優(yōu)化的,所以在閱讀本篇博客之前,請(qǐng)先移步看一下上...

    cppprimer 評(píng)論0 收藏0
  • XGboost數(shù)據(jù)比賽實(shí)戰(zhàn)之調(diào)參篇(完整流程)

    摘要:字符串函數(shù)名,或是可調(diào)用對(duì)象,需要其函數(shù)簽名形如如果是,則使用的誤差估計(jì)函數(shù)。運(yùn)行后的結(jié)果為每輪迭代運(yùn)行結(jié)果參數(shù)的最佳取值最佳模型得分由輸出結(jié)果可知參數(shù)的最佳取值。提醒一點(diǎn),這個(gè)分?jǐn)?shù)是根據(jù)前面設(shè)置的得分函數(shù)算出來(lái)的,即中的。 這一篇博客的內(nèi)容是在上一篇博客Scikit中的特征選擇,XGboost進(jìn)行回歸預(yù)測(cè),模型優(yōu)化的實(shí)戰(zhàn)的基礎(chǔ)上進(jìn)行調(diào)參優(yōu)化的,所以在閱讀本篇博客之前,請(qǐng)先移步看一下上...

    draveness 評(píng)論0 收藏0
  • XGboost數(shù)據(jù)比賽實(shí)戰(zhàn)之調(diào)參篇(完整流程)

    摘要:字符串函數(shù)名,或是可調(diào)用對(duì)象,需要其函數(shù)簽名形如如果是,則使用的誤差估計(jì)函數(shù)。運(yùn)行后的結(jié)果為每輪迭代運(yùn)行結(jié)果參數(shù)的最佳取值最佳模型得分由輸出結(jié)果可知參數(shù)的最佳取值。提醒一點(diǎn),這個(gè)分?jǐn)?shù)是根據(jù)前面設(shè)置的得分函數(shù)算出來(lái)的,即中的。 這一篇博客的內(nèi)容是在上一篇博客Scikit中的特征選擇,XGboost進(jìn)行回歸預(yù)測(cè),模型優(yōu)化的實(shí)戰(zhàn)的基礎(chǔ)上進(jìn)行調(diào)參優(yōu)化的,所以在閱讀本篇博客之前,請(qǐng)先移步看一下上...

    wuaiqiu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<