溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

數(shù)據(jù)挖掘技術(shù)中的最近鄰和服務(wù)器端庫怎么理解

發(fā)布時間:2022-01-14 18:51:23 來源:億速云 閱讀:136 作者:柒染 欄目:云計(jì)算

這篇文章跟大家分析一下“數(shù)據(jù)挖掘技術(shù)中的最近鄰和服務(wù)器端庫怎么理解”。內(nèi)容詳細(xì)易懂,對“數(shù)據(jù)挖掘技術(shù)中的最近鄰和服務(wù)器端庫怎么理解”感興趣的朋友可以跟著小編的思路慢慢深入來閱讀一下,希望閱讀后能夠?qū)Υ蠹矣兴鶐椭?。下面跟著小編一起深入學(xué)習(xí)“數(shù)據(jù)挖掘技術(shù)中的最近鄰和服務(wù)器端庫怎么理解”的知識吧。

在我們之前的文章中,我們將 WEKA 用作一種獨(dú)立的應(yīng)用程序。那么它在實(shí)際中能多有用呢?很顯然,它并不完美。由于 WEKA 是一種基于 Java 的應(yīng)用程序,它有一個可被用在我們自己的服務(wù)器端代碼中的 Java 庫。對于大多數(shù)人而言,這可能是最為常見的用法,因?yàn)槟梢跃帉懘a來不斷地分析您的數(shù)據(jù)并動態(tài)地做出調(diào)整,而不必依賴他人提取數(shù)據(jù)、將其轉(zhuǎn)換成 WEKA 格式,然后再在 WEKA Explorer 內(nèi)運(yùn)行它。

回頁首

最近鄰

最近鄰(也即 Collaborative Filtering 或 Instance-based Learning)是一種非常有用的數(shù)據(jù)挖掘技術(shù),可用來用輸出值已知的以前的數(shù)據(jù)實(shí)例來預(yù)測一個新數(shù)據(jù)實(shí)例的未知輸出值。從目前的這種描述看來,最近鄰非常類似于回歸和分類。那么它與這二者究竟有何不同呢?首先,回歸只能用于數(shù)值輸出,這是它與最近鄰的最直接的一個不同點(diǎn)。分類,如我們在前一篇文章的例子中看到的,使用每個數(shù)據(jù)實(shí)例 來創(chuàng)建樹,我們需要遍歷此樹才能找到答案。而這一點(diǎn)對于某些數(shù)據(jù)而言會是一個很嚴(yán)重的問題。舉個例子,亞馬遜這樣的公司常常使用 “購買了 X 的顧客還購買了 Y" 特性,如果亞馬遜擬創(chuàng)建一個分類樹,那么它將需要多少分支和節(jié)點(diǎn)?它的產(chǎn)品多達(dá)數(shù)十萬。這個樹將有多巨大呀?如此巨大的一個樹能有多精確呢?即便是單個分支,您都將會驚訝地發(fā)現(xiàn)它只有三個產(chǎn)品。亞馬遜的頁面通常會有 12 種產(chǎn)品推薦給您。對于這類數(shù)據(jù),分類樹是一種極不適合的數(shù)據(jù)挖掘模型。

而最近鄰則可以非常有效地解決所有這些問題,尤其是在上述亞馬遜的例子中遇到的這些問題。它不會受限于數(shù)量。它的伸縮性對于 20 個顧客的數(shù)據(jù)庫與對于 2000 萬個顧客的數(shù)據(jù)庫沒有什么差異,并且您可以定義您想要得到的結(jié)果數(shù)??雌饋硎且粋€很棒的技術(shù)!它的確很棒 — 并且可能對于那些正在閱讀本文的電子商務(wù)店鋪的店主最為有用。

讓我們先來探究一下最近鄰背后的數(shù)學(xué)理論,以便能更好地理解這個過程并了解此技術(shù)的某些限制。

最近鄰背后的數(shù)學(xué)理論

最近鄰技術(shù)背后的數(shù)學(xué)理論非常類似于群集技術(shù)所涉及到的數(shù)學(xué)理論。對于一個未知的數(shù)據(jù)點(diǎn),這個未知數(shù)據(jù)點(diǎn)與每個已知數(shù)據(jù)點(diǎn)之間的距離需要被計(jì)算出來。如果用電子數(shù)據(jù)表計(jì)算此距離將會非常繁瑣,而一個高性能的計(jì)算機(jī)則可以立即完成這些計(jì)算。最容易也是最為常見的一種距離計(jì)算方式是 “Normalized Euclidian Distance”。它看起來復(fù)雜,實(shí)則不然。讓我們通過一個例子來弄清楚第 5 個顧客有可能會購買什么產(chǎn)品?

清單 1. 最近鄰的數(shù)學(xué)理論
Customer     Age     Income     Purchased Product
1            45       46k       Book
2            39       100k      TV
3            35       38k       DVD
4            69       150k      Car Cover
5            58       51k       ???

Step 1:  Determine Distance Formula
Distance = SQRT( ((58 - Age)/(69-35))^2) + ((51000 - Income)/(150000-38000))^2 )

Step 2:  Calculate the Score
Customer     Score     Purchased Product
1            .385         Book
2            .710         TV
3            .686         DVD
4            .941         Car Cover
5            0.0          ???

如果使用最近鄰算法回答我們上面遇到的 “第 5 個顧客最有可能購買什么產(chǎn)品” 這一問題,答案將是一本書。這是因?yàn)榈?5 個顧客與第 1 個顧客之間的距離要比第 5 個顧客與其他任何顧客之間的距離都短(實(shí)際上是短很多)。基于這個模型,可以得出這樣的結(jié)論:由最像第 5 個顧客的顧客可以預(yù)測出第 5 個顧客的行為。

不過,最近鄰的好處遠(yuǎn)不止于此。最近鄰算法可被擴(kuò)展成不僅僅限于一個最近匹配,而是可以包括任意數(shù)量的最近匹配。可將這些最近匹配稱為是 “N-最近鄰”(比如 3-最近鄰)?;氐缴鲜龅睦樱绻覀兿胍赖?5 個顧客最有可能購買的產(chǎn)品,那么這次的結(jié)論是書 DVD。而對于上述的亞馬遜的例子,如果想要知道某個顧客最有可能購買的 12 個產(chǎn)品,就可以運(yùn)行一個 12-最近鄰算法(但亞馬遜實(shí)際運(yùn)行的算法要遠(yuǎn)比一個簡單的 12-最近鄰算法復(fù)雜)。

并且,此算法不只限于預(yù)測顧客購買哪個產(chǎn)品。它還可被用來預(yù)測一個 Yes/No 的輸出值。考慮上述例子,如果我們將最后一列改為(從顧客 1 到 顧客 4)“Yes,No,Yes,No,”,那么用 1-最近鄰模型可以預(yù)測第 5 個顧客會說 “Yes”,如果用一個 2-最近鄰算法也會得到預(yù)測結(jié)果 “Yes”(顧客 1 和 3 均說 “Yes”),若用 3-最近鄰模型仍會得到 “Yes”(顧客 1 和 3 說 “Yes”,顧客 2 說 “No”,所以它們的平均值是 “Yes”)。

我們考慮的最后一個問題是 “我們應(yīng)該在我們的模型中使用多少鄰?” 啊哈 — 并不是每件事都這么簡單。為了確定所需鄰的最佳數(shù)量,需要進(jìn)行試驗(yàn)。并且,如果要預(yù)測值為 0 和 1 的列的輸出,很顯然需要選擇奇數(shù)個鄰,以便打破平局。

針對 WEKA 的數(shù)據(jù)集

我們將要為我們的最近鄰示例使用的數(shù)據(jù)集應(yīng)該看起來非常熟悉 — 這個數(shù)據(jù)集就與我們在上一篇文章的分類示例中所用的相同。該示例關(guān)于的是一個虛構(gòu)的 BMW 經(jīng)銷店及其向老客戶銷售兩年延保的促銷活動。為了回顧這個數(shù)據(jù)集,如下列出了我在上一篇文章中曾介紹過的一些指標(biāo)。

延保的以往銷售記錄中有 4,500 個數(shù)據(jù)點(diǎn)。數(shù)據(jù)集中的屬性有:收入水平 [0=$0-$30k, 1=$31k-$40k, 2=$41k-$60k, 3=$61k-$75k, 4=$76k-$100k, 5=$101k-$150k, 6=$151k-$500k, 7=$501k+]、顧客首輛 BMW 購買的年/月、最近一輛 BMW 購買的年/月、顧客是否在過去對延保的促銷有過響應(yīng)。

清單 2. 最近鄰 WEKA 數(shù)據(jù)
@attribute IncomeBracket {0,1,2,3,4,5,6,7}
@attribute FirstPurchase numeric
@attribute LastPurchase numeric
@attribute responded {1,0}

@data

4,200210,200601,0
5,200301,200601,1
...

WEKA 內(nèi)的最近鄰

我們?yōu)楹我褂门c分類例子中相同的數(shù)據(jù)集呢?這是因?yàn)榉诸惸P偷玫降慕Y(jié)果,只有 59 % 的準(zhǔn)確率,而這完全不能接受(比猜想好不到哪去)。我們將提高準(zhǔn)確率并為這個虛構(gòu)的經(jīng)銷商提供一些有用的信息。

將數(shù)據(jù)文件 bmw-training.arff 載入 WEKA,步驟與我們之前在 Preprocess 選項(xiàng)卡中使用的相同。加載數(shù)據(jù)后,屏幕應(yīng)該類似于圖 1。

圖 1. WEKA 內(nèi)的 BMW 最近鄰數(shù)據(jù)

數(shù)據(jù)挖掘技術(shù)中的最近鄰和服務(wù)器端庫怎么理解

與我們在之前文章的回歸和分類模型中所做的類似,我們接下來應(yīng)該選擇 Classify 選項(xiàng)卡。在這個選項(xiàng)卡上,我們應(yīng)該選擇 lazy,然后選擇IBkIB 代表的是 Instance-Based,而 k 則允許我們指定要使用的鄰的數(shù)量)。

圖 2. BMW 最近鄰算法

數(shù)據(jù)挖掘技術(shù)中的最近鄰和服務(wù)器端庫怎么理解

現(xiàn)在,我們就準(zhǔn)備好可以在 WEKA 內(nèi)創(chuàng)建我們的模型了。請確保選中 Use training set 以便我們使用剛載入的這個數(shù)據(jù)集來創(chuàng)建我們的模型。 單擊 Start,讓 WEKA 運(yùn)行。圖 3 顯示了一個屏幕快照,清單 3 則包含了此模型的輸出。

圖 3. BMW 最近鄰模型

數(shù)據(jù)挖掘技術(shù)中的最近鄰和服務(wù)器端庫怎么理解  

清單 3. IBk 計(jì)算的輸出
=== Evaluation on training set ===
=== Summary ===

Correctly Classified Instances        2663               88.7667 %
Incorrectly Classified Instances       337               11.2333 %
Kappa statistic                          0.7748
Mean absolute error                      0.1326
Root mean squared error                  0.2573
Relative absolute error                 26.522  %
Root relative squared error             51.462  %
Total Number of Instances             3000     

=== Detailed Accuracy By Class ===

               TP Rate   FP Rate   Precision   Recall  F-Measure   ROC Area  Class
                 0.95      0.177      0.847     0.95      0.896      0.972    1
                 0.823     0.05       0.941     0.823     0.878      0.972    0
Weighted Avg.    0.888     0.114      0.893     0.888     0.887      0.972

=== Confusion Matrix ===

    a    b   <-- classified as
 1449   76 |    a = 1
 261 1214 |    b = 0

上述結(jié)果與我們用分類創(chuàng)建模型時的結(jié)果有何差異呢?使用最近鄰的這個模型的準(zhǔn)確率為 89 %,而分類模型的準(zhǔn)確率只有 59 %,所以這絕對是一個很好的開始。接近 90 % 的準(zhǔn)確率是非常可以接受的。讓我們再進(jìn)一步來分析這些結(jié)果的假正和假負(fù)的情況,以便深入了解來自 WEKA 的這些結(jié)果在實(shí)際業(yè)務(wù)中的適用。

此模型的結(jié)果顯示我們有 76 個假正(2.5 %),有 261 個假負(fù)(8.7 %)。請記住在本例中一個假正意味著我們的模型預(yù)測該客戶會購買延保而實(shí)際上卻未購買,而一個假負(fù)則意味著我們的模型預(yù)測客戶不會購買延保而實(shí)際卻購買了。讓我們估測經(jīng)銷商的宣傳單的派發(fā)成本是每個傳單 $3,延保為經(jīng)銷商帶來了 $400 的利潤。這個模型對經(jīng)銷商的成本/收益的預(yù)測應(yīng)為 $400 - (2.5% * $3) - (8.7% * 400) = $365。所以,從此模型看來,這個經(jīng)銷商相當(dāng)有利可圖。與之相比,使用分類模型預(yù)測的成本/收益只有 $400 - (17.2% * $3) - (23.7% * $400) = $304,由此可以看出使用正確的模型可以為此經(jīng)銷商提供 20 % 潛在收入的提高。

您可以自己練習(xí)著在這個模型中嘗試不同數(shù)量的最近鄰(您可以右鍵單擊下一個 “IBk -K 1....”,就會看到一列參數(shù))??梢匀我飧?"KNN"(K-最近鄰)。在本例中您將會看到隨著加入更多的鄰,模型的準(zhǔn)確率實(shí)際上卻降低了。

此模型的一些不盡人意之處:當(dāng)我們談?wù)撓駚嗰R遜這樣的數(shù)據(jù)集時,最近鄰的強(qiáng)大威力是顯而易見的。對于有 2000 萬用戶的亞馬遜,此算法非常準(zhǔn)確,因?yàn)樵趤嗰R遜的數(shù)據(jù)庫中與您有著類似購買習(xí)慣的潛在客戶很多。您的最近鄰會非常相似。因而,所創(chuàng)建的模型會十分準(zhǔn)確和高效。相反,如果能比較的數(shù)據(jù)點(diǎn)相對很少的話,這個模型很快就會損壞,不再準(zhǔn)確。在在線電子商務(wù)店鋪的初期,比如只有 50 個顧客,那么產(chǎn)品推薦特性很可能一點(diǎn)都不準(zhǔn)確,因?yàn)樽罱弻?shí)際上與您本身相差甚遠(yuǎn)。

最近鄰技術(shù)最后的一個挑戰(zhàn)是該算法的計(jì)算成本有可能會很高。在亞馬遜的例子中,對于它的 2000 萬客戶,每個客戶都必須針對其他的 2000 萬客戶進(jìn)行計(jì)算以便找到最近鄰。首先,如果您的業(yè)務(wù)也有 2000 萬的客戶群,那么這便不成問題,因?yàn)槟鷷?cái)源廣進(jìn)。其次,這種類型的計(jì)算非常適合用云來完成,因?yàn)樗鼈兡軌虮环稚⒌皆S多計(jì)算機(jī)上同時完成,并最終完成比較。(比如,Google 的 MapReduce。)第三,實(shí)際上,如果我只是購買了一本書,那么根本不必針對我對比亞馬遜數(shù)據(jù)庫內(nèi)的每個 客戶。只需將我與其他的購書者進(jìn)行對比來尋找最佳匹配,這樣一來,就將潛在的鄰縮小到整個數(shù)據(jù)庫的一部分。

請記?。簲?shù)據(jù)挖掘模型并不只是簡單的輸入-輸出機(jī)制 — 必須先對數(shù)據(jù)進(jìn)行檢查以決定該選擇哪種正確的模型,讓輸入能夠設(shè)法減少計(jì)算時間,而輸出則必須被分析且要確保準(zhǔn)確后才能據(jù)此做出整體的判斷。

進(jìn)一步的閱讀:如果您有興趣進(jìn)一步學(xué)習(xí)最近鄰算法,可以按如下術(shù)語搜索相關(guān)信息:distance weighting、Hamming distance、Mahalanobis distance。

回頁首

在服務(wù)器上使用 WEKA

有關(guān) WEKA 最酷的一件事情是它不僅是一個獨(dú)立的應(yīng)用程序,而且還是一個完備的 Java JAR 文件,可以將其投入到您服務(wù)器的 lib 文件夾并從您自己的服務(wù)器端代碼進(jìn)行調(diào)用。這能為您的應(yīng)用程序帶來很多有趣的、和重要的功能。您可以添加充分利用了我們到目前所學(xué)的全部數(shù)據(jù)挖掘技術(shù)的報(bào)告。您可以為您的電子商務(wù)店鋪創(chuàng)建一個“產(chǎn)品推薦”小部件,類似于亞馬遜站點(diǎn)上的那個(由于根本不可能為每個顧客都按需這么做,因此需要貫徹這個獨(dú)立的應(yīng)用程序運(yùn)行它)。WEKA 獨(dú)立應(yīng)用程序本身只調(diào)用底層的 WEKA Java API,所以您應(yīng)該已經(jīng)看到過這個 API 的運(yùn)轉(zhuǎn)了。現(xiàn)在,我們應(yīng)該看看如何將它集成到您的自己代碼中。

實(shí)際上,您已經(jīng)下載了這個 WEKA API JAR;它就是您啟動 WEKA Explorer 時調(diào)用的那個 JAR 文件。為了訪問此代碼,讓您的 Java 環(huán)境在此類路徑中包含這個 JAR 文件。在您自己的代碼中使用第三方 JAR 文件的步驟如常。

正如您所想,WEKA API 內(nèi)的這個中心構(gòu)建塊就是數(shù)據(jù)。數(shù)據(jù)挖掘圍繞此數(shù)據(jù)進(jìn)行,當(dāng)然所有我們已經(jīng)學(xué)習(xí)過的這些算法也都是圍繞此數(shù)據(jù)的。那么讓我們看看如何將我們的數(shù)據(jù)轉(zhuǎn)換成 WEKA API 可以使用的格式。讓我們從簡單的開始,先來看看本系列有關(guān)房子價(jià)值的第一篇文章中的那些數(shù)據(jù)。

: 我最好提前告誡您 WEKA API 有時很難導(dǎo)航。首要的是要復(fù)核所用的 WEKA 的版本和 API 的版本。此 API 在不同的發(fā)布版間變化會很大,以至于代碼可能會完全不同。而且,即便此 API 完備,卻沒有什么非常好的例子可以幫助我們開始(當(dāng)然了,這也是為什么您在閱讀本文的原因)。我使用的是 WEKA V3.6。

清單 4 顯示了如何格式化數(shù)據(jù)以便為 WEKA 所用。

清單 4. 將數(shù)據(jù)載入 WEKA
// Define each attribute (or column), and give it a numerical column number
// Likely, a better design wouldn't require the column number, but
// would instead get it from the index in the container
Attribute a1 = new Attribute("houseSize", 0);
Attribute a2 = new Attribute("lotSize", 1);
Attribute a3 = new Attribute("bedrooms", 2);
Attribute a4 = new Attribute("granite", 3);
Attribute a5 = new Attribute("bathroom", 4);
Attribute a6 = new Attribute("sellingPrice", 5);

// Each element must be added to a FastVector, a custom
// container used in this version of Weka.
// Later versions of Weka corrected this mistake by only
// using an ArrayList
FastVector attrs = new FastVector();
attrs.addElement(a1);
attrs.addElement(a2);
attrs.addElement(a3);
attrs.addElement(a4);
attrs.addElement(a5);
attrs.addElement(a6);

// Each data instance needs to create an Instance class
// The constructor requires the number of columns that
// will be defined.  In this case, this is a good design,
// since you can pass in empty values where they exist.
Instance i1 = new Instance(6);
i1.setValue(a1, 3529);
i1.setValue(a2, 9191);
i1.setValue(a3, 6);
i1.setValue(a4, 0);
i1.setValue(a5, 0);
i1.setValue(a6, 205000);

....

// Each Instance has to be added to a larger container, the
// Instances class.  In the constructor for this class, you
// must give it a name, pass along the Attributes that
// are used in the data set, and the number of
// Instance objects to be added.  Again, probably not ideal design
// to require the number of objects to be added in the constructor,
// especially since you can specify 0 here, and then add Instance
// objects, and it will return the correct value later (so in
// other words, you should just pass in '0' here)
Instances dataset = new Instances("housePrices", attrs, 7);
dataset.add(i1);
dataset.add(i2);
dataset.add(i3);
dataset.add(i4);
dataset.add(i5);
dataset.add(i6);
dataset.add(i7);

// In the Instances class, we need to set the column that is
// the output (aka the dependent variable).  You should remember
// that some data mining methods are used to predict an output
// variable, and regression is one of them.
dataset.setClassIndex(dataset.numAttributes() - 1);

現(xiàn)在我們已經(jīng)將數(shù)據(jù)載入了 WEKA。雖然比想象中的要稍微難一點(diǎn),但您可以看到編寫自己的包裝器類來快速從數(shù)據(jù)庫提取數(shù)據(jù)并將其放入一個 WEKA 實(shí)例類還是很簡單和有益的。實(shí)際上,我強(qiáng)烈建議如果打算在服務(wù)器上使用 WEKA,那么就不要怕花時間,因?yàn)橐赃@種方式處理數(shù)據(jù)是很繁瑣的。一旦將數(shù)據(jù)放入了這個實(shí)例對象,您就可以在數(shù)據(jù)上進(jìn)行任何您想要的數(shù)據(jù)挖掘了,所以您想要這個步驟盡可能地簡單。

讓我們把我們的數(shù)據(jù)通過回歸模型進(jìn)行處理并確保輸出與我們使用 Weka Explorer 計(jì)算得到的輸出相匹配。實(shí)際上使用 WEKA API 讓數(shù)據(jù)通過回歸模型得到處理非常簡單,遠(yuǎn)簡單于實(shí)際加載數(shù)據(jù)。

清單 5. 在 WEKA 內(nèi)創(chuàng)建回歸模型
// Create the LinearRegression model, which is the data mining
// model we're using in this example
LinearRegression linearRegression = new LinearRegression();

// This method does the "magic", and will compute the regression
// model.  It takes the entire dataset we've defined to this point
// When this method completes, all our "data mining" will be complete
// and it is up to you to get information from the results
linearRegression.buildClassifier(dataset);

// We are most interested in the computed coefficients in our model,
// since those will be used to compute the output values from an
// unknown data instance.
double[] coef = linearRegression.coefficients();

// Using the values from my house (from the first article), we
// plug in the values and multiply them by the coefficients
// that the regression model created.  Note that we skipped
// coefficient[5] as that is 0, because it was the output
// variable from our training data
double myHouseValue = (coef[0] * 3198) +
                      (coef[1] * 9669) +
                      (coef[2] * 5) +
                      (coef[3] * 3) +
                      (coef[4] * 1) +
                      coef[6];

System.out.println(myHouseValue);
// outputs 219328.35717359098
// which matches the output from the earlier article

大功告成!運(yùn)行分類、群集或最近鄰都不如回歸模型簡單,但它們也沒有那么困難。運(yùn)行數(shù)據(jù)挖掘模型要比將數(shù)據(jù)載入模型簡單得多。

我們希望這一小節(jié)能夠讓您產(chǎn)生將 WEKA 集成到您自己的服務(wù)器端代碼的興趣。不管您是運(yùn)營一個電子商務(wù)的店鋪并想為客戶提供更好的產(chǎn)品推薦,還是您有一個禮券促銷活動需要加以改善,抑或是您想要優(yōu)化您的 AdWords 活動,又或者是您想要優(yōu)化您的著陸頁,這些數(shù)據(jù)挖掘技術(shù)都能幫助您在這些領(lǐng)域改善您的結(jié)果。比如,借助于 WEKA API 的內(nèi)置特性,您就可以編寫服務(wù)器端代碼來輪換您的著陸頁并使用數(shù)據(jù)挖掘不斷地分析結(jié)果以找到最為有效的著陸頁。通過在 AdWords 上綜合它與數(shù)據(jù)挖掘分析,您就可以快速找到最佳的途徑來將客戶吸引到您的站點(diǎn)并將客戶的到訪變?yōu)殇N售。

關(guān)于數(shù)據(jù)挖掘技術(shù)中的最近鄰和服務(wù)器端庫怎么理解就分享到這里啦,希望上述內(nèi)容能夠讓大家有所提升。如果想要學(xué)習(xí)更多知識,請大家多多留意小編的更新。謝謝大家關(guān)注一下億速云網(wǎng)站!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI