溫馨提示×

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

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

超市用戶的k-means聚類處理

發(fā)布時(shí)間:2020-07-29 17:16:03 來(lái)源:網(wǎng)絡(luò) 閱讀:344 作者:nineteens 欄目:編程語(yǔ)言

  導(dǎo)入超市用戶的數(shù)據(jù)

  import pandas as pd

  from sklearn.preprocessing import StandardScaler #標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化

  com = pd.read_csv('./company.csv',encoding='ansi')

  

超市用戶的k-means聚類處理


  導(dǎo)入剔除異常值的函數(shù)

  def box_analysis(data):

  '''

  進(jìn)行箱線圖分析,剔除異常值

  :param data:

  :return:

  '''

  qu = data.quantile(0.75)

  ql = data.quantile(0.25)

  iqr = qu - ql

  #上限與下限 1.5可以微調(diào)

  up = qu+1.5*iqr

  low = ql-1.5*iqr

  #進(jìn)行比較運(yùn)算

  bool_id_1 = data<=up

  bool_id_2 = data>=low

  bool_num = bool_id_1 & bool_id_2

  return bool_num

  進(jìn)行缺失值檢測(cè)

  print(com.isnull().sum())

  檢測(cè)結(jié)果無(wú)缺失值

  篩選有用特征,切片處理

  data = com.iloc[:,-2:]

  

超市用戶的k-means聚類處理


  箱線圖分析來(lái)進(jìn)行異常值檢測(cè)

  按照平均每次消費(fèi)金額進(jìn)行異常值去除

  bood_id_1 = box_analysis(data.iloc[:,0])

  data = data.loc[bood_id_1,:]

  按照平均消費(fèi)周期進(jìn)行異常值去除

  bood_id_2 = box_analysis(data.iloc[:,1])

  data = data.loc[bood_id_2,:]

  構(gòu)建需要特征

  data.loc[:,'每日消費(fèi)金額'] = data.loc[:,'平均每次消費(fèi)金額']/data.loc[:,'平均消費(fèi)周期(天)']

  標(biāo)準(zhǔn)化數(shù)據(jù),量級(jí)不大,暫時(shí)不處理量級(jí)

  stand = StandardScaler() #創(chuàng)建標(biāo)準(zhǔn)差示例

  #先計(jì)算每一列的均值、標(biāo)準(zhǔn)差再進(jìn)行轉(zhuǎn)化數(shù)據(jù)

  x = stand.fit_transform(data) #進(jìn)行標(biāo)準(zhǔn)化

  把上面數(shù)據(jù)處理部分封裝進(jìn)函數(shù)

  def built_data():

  #缺失值檢測(cè)

  # print(com.isnull().sum())

  #篩選有用特征,切片處理

  data = com.iloc[:,-2:]

  # print(data)

  #異常值檢測(cè),箱線圖分析

  #按照平均每次消費(fèi)金額進(jìn)行異常值去除

  bood_id_1 = box_analysis(data.iloc[:,0])

  data = data.loc[bood_id_1,:]

  #按照平均消費(fèi)周期進(jìn)行異常值去除

  bood_id_2 = box_analysis(data.iloc[:,1])

  data = data.loc[bood_id_2,:]

  #構(gòu)建需要特征

  data.loc[:,'每日消費(fèi)金額'] = data.loc[:,'平均每次消費(fèi)金額']/data.loc[:,'平均消費(fèi)周期(天)']

  # print(data)

  #標(biāo)準(zhǔn)化數(shù)據(jù),量級(jí)不大,暫時(shí)不處理量級(jí)

  #標(biāo)準(zhǔn)化數(shù)據(jù)

  stand = StandardScaler() #創(chuàng)建標(biāo)準(zhǔn)差示例

  #先計(jì)算每一列的均值、標(biāo)準(zhǔn)差再進(jìn)行轉(zhuǎn)化數(shù)據(jù)

  x = stand.fit_transform(data) #進(jìn)行標(biāo)準(zhǔn)化

  return data.values

  繪圖部分函數(shù)如下

  def show_res_km(data,y_predict,center):

  '''無(wú)錫婦科檢查醫(yī)院 http://www.87554006.com/

  進(jìn)行結(jié)果展示

  :param data:原始數(shù)據(jù)

  :param y_predict:預(yù)測(cè)標(biāo)簽

  :param center:最終的聚類中心

  :return:

  '''

  plt.figure()

  #獲取原始數(shù)據(jù)的行數(shù)

  index_num = data.shape[0]

  #

  colors = ['r','g','b','y']

  for i in range(index_num):

  plt.scatter(data[i,0],data[i,1],c=colors[int(y_predict[i])])

  #散點(diǎn)圖的繪制,一個(gè)一個(gè)繪制

  #聚類中心的位置

  #b的話是描點(diǎn)劃線,bx的話是畫點(diǎn)但是不描線

  plt.plot(center[:,0],center[:,1],'bx',marker='x',markersize=12)

  plt.show()

  調(diào)用函數(shù)來(lái)進(jìn)行聚類

  data = built_data()

  #導(dǎo)包實(shí)現(xiàn)

  k=3

  km = KMeans(n_clusters=k)

  #訓(xùn)練數(shù)據(jù)

  km.fit(data)

  #進(jìn)行預(yù)測(cè) ,y_predict預(yù)測(cè)標(biāo)簽

  y_predict = km.predict(data)

  #獲取聚類中心

  center = km.cluster_centers_

  print('預(yù)測(cè)值:\n',y_predict)

  print('聚類中心:\n',center)

  show_res_km(data.values,y_predict,center)

  得出結(jié)果


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

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

AI