張一帆 胡佳浩 李依橋
摘要:商品的數(shù)量非常大,需要按照一定的標(biāo)準(zhǔn)分為k類,如何把眾多數(shù)據(jù)對象,分為合適k類商品,成為數(shù)據(jù)分析中的一個研究問題。本文主要闡述了該模型的具體實(shí)現(xiàn)過程,主要包括數(shù)據(jù)采集、數(shù)據(jù)歸一化處理、構(gòu)造算法模型、評估算法模型。通過采用實(shí)例數(shù)據(jù)集進(jìn)行模型的訓(xùn)練和測試,實(shí)驗(yàn)結(jié)果表明:該模型能較準(zhǔn)確的進(jìn)行商品對象的分類,測試誤差較小。
關(guān)鍵詞:機(jī)器學(xué)習(xí);k-means算法;Python
中圖分類號:TP311.13? ? ? 文獻(xiàn)標(biāo)識碼:A? ? ?文章編號:1007-9416(2020)04-0000-00
0引言
如今網(wǎng)站的快速發(fā)展,人們的生活和工作都離不開網(wǎng)絡(luò)。人們的生活節(jié)奏也在逐漸加快,工作越來越忙了。網(wǎng)購網(wǎng)站吸納了眾多的群眾的參與,積累了大量的用戶資源。而且我國廣大的女性群體為網(wǎng)購網(wǎng)站提供了良好的用戶基礎(chǔ)[1]。一個好的網(wǎng)購網(wǎng)站可以帶運(yùn)輸?shù)榷喾N產(chǎn)業(yè)的發(fā)展,但是目前的網(wǎng)購網(wǎng)站對用戶的數(shù)據(jù)處理有時候不夠準(zhǔn)確,商品分類標(biāo)準(zhǔn)不夠準(zhǔn)確。通過對網(wǎng)站數(shù)據(jù)進(jìn)行分析,采用k-means算法較好的完成商品配對,為網(wǎng)站用戶提供較好的服務(wù)。
1 K-means算法
K均值(K-Means)算法是無監(jiān)督的聚類方法,實(shí)現(xiàn)起來比較簡單,聚類效果也比較好,因此應(yīng)用很廣泛。K-Means算法針對不同應(yīng)用場景,有不同方面的改進(jìn)。我們從最傳統(tǒng)的K-Means算法講起,然后在此基礎(chǔ)上介紹初始化質(zhì)心優(yōu)化K-Means++算法,距離計(jì)算優(yōu)化Elkan K-Means算法和大樣本情況下Mini Batch K-Means算法[2]。
我們給定一個數(shù)據(jù)集D,以及要劃分的簇?cái)?shù)k,就能通過該算法將數(shù)據(jù)集劃分為k個簇。一般來說,每個數(shù)據(jù)項(xiàng)只能屬于其中一個簇。具體方法可以這樣描述:
(1)假設(shè)數(shù)據(jù)集在一個m維的歐式空間中,我們初始時,可隨機(jī)選擇k個數(shù)據(jù)項(xiàng)作為這kk個簇的形心Ci,i∈{1,2,…k},每個簇心代表的其實(shí)是一個簇,也就是一組數(shù)據(jù)項(xiàng)構(gòu)成的集合。然后對所有的n個數(shù)據(jù)項(xiàng),計(jì)算這些數(shù)據(jù)項(xiàng)與Ci的距離(一般情況下,在歐式空間中,數(shù)據(jù)項(xiàng)之間的距離用歐式距離表示)。比如對于數(shù)據(jù)項(xiàng)Dj,j∈{1,…n},它與其中的一個簇心Ci最近,則將Dj歸類為簇Ci[3]。
(2)通過上面這一步,我們就初步將DD劃分為k個類了。現(xiàn)在重新計(jì)算這k個類的形心。方法是計(jì)算類中所有數(shù)據(jù)項(xiàng)的各個維度的均值。這樣,構(gòu)成一個新的形心,并且更新這個類的形心。每個類都這樣計(jì)算一次,更新形心。
(3)對上一步計(jì)算得到的新的形心,重復(fù)進(jìn)行第(1),(2)步的工作,直到各個類的形心不再變化為止[4]。
2分類實(shí)現(xiàn)
本次使用的樣本數(shù)據(jù)一共有300行,對它們進(jìn)行數(shù)據(jù)分類。分類過程具體實(shí)現(xiàn)分為四個步驟,分別是采樣數(shù)據(jù)、樣本數(shù)據(jù)可視化、數(shù)據(jù)分類,顯示分類視圖。
2.1獲取數(shù)據(jù)
我們獲取300個樣本數(shù)據(jù),同時做成表格,代碼如下:
import pandas as pda
import numpy as npy
import matplotlib.pylab as pyl
import pymysql
conn=pymysql.connect(host="127.0.0.1",user="root",passwd="root",db="tb")
sql="select price,comment from goods limit 300"
dataf=pda.read_sql(sql,conn)
x=dataf.iloc[:,:].as_matrix()
2.2模型分類
我們讓300個樣本數(shù)據(jù)劃分為不同的類別,該部分的核心代碼如下所示:
from sklearn.cluster import KMeans
kms=KMeans(n_clusters=2)
y=kms.fit_predict(x)
print(y)
for i in range(0,len(y)):
if(y[i]==0):? ? ? ? pyl.plot(dataf.iloc[i:i+1,0:1].as_matrix(),dataf.iloc[i:i+1,1:2].as_matrix(),"*r")
elif(y[i]==1):? ? ? ? pyl.plot(dataf.iloc[i:i+1,0:1].as_matrix(),dataf.iloc[i:i+1,1:2].as_matrix(),"sy")
elif(y[i]==2): pyl.plot(dataf.iloc[i:i+1,0:1].as_matrix(),dataf.iloc[i:i+1,1:2].as_matrix(),"*k")
pyl.show()
2.3分類結(jié)果
對于我們的測試數(shù)據(jù)的分類結(jié)果,我們首先標(biāo)每類數(shù)據(jù),黃色方塊代表第一類,黑色五角代表第二類,紅色五角代表第三類。為了更直觀的的理解樣本數(shù)據(jù),數(shù)據(jù)采用Matplotlib庫進(jìn)行繪圖分析,如圖1所示。
3結(jié)語
本文通過采用k-means算法對商品數(shù)據(jù)進(jìn)行分析,采用Python數(shù)據(jù)可視化庫中的函數(shù)和Matplotlib庫完成對數(shù)據(jù)的分類。通過測試結(jié)果,分類結(jié)果達(dá)到了相對的平均,基本能夠滿足我們的要求。
參考文獻(xiàn)
[1]魏建東.K-means初始化算法研究[D].南京:南京理工大學(xué),2015.
[2]宋建林.K-means聚類算法的改進(jìn)研究[D].合肥:安徽大學(xué),2016.
[3]李衛(wèi)平.對k-means聚類算法的改進(jìn)研究[J].中國西部科技,2010(24):49-50.
[4]劉越.K-means聚類算法的改進(jìn)[D].桂林:廣西師范大學(xué),2016.
收稿日期:2020-03-15
基金項(xiàng)目:2019年省級大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃項(xiàng)目:ID3算法在網(wǎng)絡(luò)購物滿意度預(yù)測研究中的應(yīng)用(S201910722012)。
作者簡介:張一帆,男,陜西渭南人,本科,研究方向:軟件工程。
Research on Commodity Clustering Based on Kmeans Algorithm
ZHANG Yi-fan, HU Jia-hao, LI Yi-qiao
(Computer College of Xianyang Normal University, Xianyang Shaanxi 712000)
Abstract:The quantity of commodities is very large, which needs to be divided into k categories according to certain standards. How to divide a large number of data objects into appropriate K categories of commodities has become a research problem in data analysis. This paper mainly describes the specific implementation process of the model, including data collection, data normalization, algorithm model construction, evaluation algorithm model. Through the training and testing of the model with the case data set, the experimental results show that the model can classify the commodity objects accurately, and the test error is small.
Keywords: machine learning;k-means algorithm;Python