最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解基于K-means的用戶畫像聚類模型

 更新時(shí)間:2022年05月17日 14:20:06   作者:拼命_小李  
這篇文章主要介紹了基于K-means的用戶畫像聚類模型,本文中就是使用one-hot思想將不同維度的數(shù)據(jù)利用字典映射的方式將其轉(zhuǎn)化為數(shù)據(jù)向量,需要的朋友可以參考下

一、概述

使用K-means進(jìn)行用戶聚類劃分主要的目的是實(shí)現(xiàn)用戶畫像的電影推薦系統(tǒng),該推薦包括兩部分,第一部分通過協(xié)同過濾實(shí)現(xiàn)電影推薦 ,第二部分,構(gòu)建用戶畫像實(shí)現(xiàn)電影推薦,實(shí)現(xiàn)通過靜態(tài)屬性實(shí)現(xiàn):用戶性別,年齡,地域,角色(學(xué)生、上班族、待業(yè))、地域、婚姻狀態(tài),使用聚類(K-mens)算法對(duì)人群進(jìn)行劃分,實(shí)現(xiàn)相同人群的電影推薦,其次動(dòng)態(tài)屬性:通過記錄用戶行為數(shù)據(jù),搜索記錄使用word2vec模型實(shí)現(xiàn)相似搜索關(guān)鍵詞推薦影片。(推薦系統(tǒng)我后續(xù)會(huì)進(jìn)行講解)

文中使用語言為python3.6以上實(shí)現(xiàn),使用的工具是jupyter-notebook進(jìn)行開發(fā),主要利用python的sklearn、pandas、faker、matplotlib等庫實(shí)現(xiàn)。

摘要:本文主要講述的是第二部分使用K-means聚類構(gòu)建用戶畫像模型從而實(shí)現(xiàn)相同用戶喜愛電影的推薦

二、理論

K-means是一種無監(jiān)督的聚類算法,主要思想就是先隨機(jī)選取K個(gè)對(duì)象作為初始的聚類中心。然后計(jì)算每個(gè)對(duì)象與各個(gè)種子聚類中心之間的距離,從而找出相似對(duì)象。

三、實(shí)現(xiàn)

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

我們聚類前需要數(shù)據(jù)信息:包括姓名、年齡、性別、地址、工作類別、婚姻狀態(tài)等等,但是我們棘手的問題,數(shù)據(jù)從哪里來呢,獲取數(shù)據(jù)有目前有兩種方式:第一種你可以通過網(wǎng)絡(luò)爬蟲技術(shù)去爬取信息相關(guān)個(gè)人信息,第二種python擁有強(qiáng)大的庫faker能夠幫助我們實(shí)現(xiàn)用戶信息自動(dòng)模擬生成。faker的使用方法可以參照我之前寫的博客哦~faker生成用戶信息

from faker import Faker
import pandas as pd
import numpy as np
from collections import OrderedDict
fake = Faker(locale='zh_CN')
sex_dict = OrderedDict([('男', 0.52), ('女', 0.48)])
married_dict = OrderedDict([('未婚', 0.4), ('已婚', 0.5), ('離異', 0.1), ])
work_dict = OrderedDict([('在職', 0.7), ('自由職業(yè)', 0.3), ])
type_dict = OrderedDict([('白領(lǐng)', 0.45), ('教師', 0.1), ('工人', 0.2), ('公務(wù)員', 0.1), ('銷售', 0.15)])
name = []
age = []
address = []
sex = []
work = []
married = []
type = []
# 生成人數(shù)
num = 1000
# 生成name age address 
for i in range(num):
    name.append(fake.name())
    age.append(fake.random_int(min=16,max=45))
    address.append(fake.province())
    sex.append(fake.random_element(sex_dict))
    work.append(fake.random_element(work_dict))
    type.append(fake.random_element(type_dict))
    married.append(fake.random_element(married_dict))
data = {'name':name,'age':age,'sex':sex,'address':address,'work':work,'married':married,'type':type}
users = pd.DataFrame.from_dict(data)

數(shù)據(jù)處理

上面我們已經(jīng)成功利用faker庫生成了用戶信息,但是我們想想,計(jì)算機(jī)算法是不可能明白中文含義的,那么如何讓kmeans模型知道這些數(shù)據(jù)的含義意義呢?我們需要將上述產(chǎn)生的數(shù)據(jù)進(jìn)行向量化操作,文本向量化有很多方法,例如:one-hot、tfidf等等,當(dāng)然不同的向量化方式有個(gè)自的優(yōu)劣,感興趣大家可以去單獨(dú)了解,此處不做詳細(xì)解答。

本文中就是使用one-hot思想將不同維度的數(shù)據(jù)利用字典映射的方式將其轉(zhuǎn)化為數(shù)據(jù)向量。

sex_map = {'男':0, '女':1}
married_map = {'未婚':0,'已婚':1,'離異':2}
work_map = {'在職':0, '自由職業(yè)':1}
type_map = {'白領(lǐng)':0,'教師':1,'工人':2,'公務(wù)員':3,'銷售':4}
addr_map = {'上海市':0,'云南省':1,'內(nèi)蒙古自治區(qū)':2,'北京市':3,'臺(tái)灣省':4,'吉林省':5,'四川省':6,'天津市':7,'寧夏回族自治區(qū)':8
,'安徽省':9,'山東省':10,'山西省':11,'廣東省':12,
'廣西壯族自治區(qū)':13,'新疆維吾爾自治區(qū)':14,'江蘇省':15,'江西省':16,'河北省':17,'河南省':18,'浙江省':19,'海南省':20,'湖北省':21,'湖南省':22,'澳門特別行政區(qū)':23,'甘肅省':24,
'福建省':25,'西藏自治區(qū)': 26,'貴州省':27,'遼寧省':28,'重慶市':29,'陜西省':30,'青海省':31,'香港特別行政區(qū)':32,'黑龍江省':33}

然后使用pandas中的map方法將每個(gè)維度數(shù)據(jù)按照上述字典類型進(jìn)行向量化操作 ,轉(zhuǎn)化后如下圖所示:

users['married'] = users['married'].map(married_map)

模型實(shí)現(xiàn)

我們使用sklearn機(jī)器學(xué)習(xí)庫創(chuàng)建kmeans模型,需要注意的是在使用kmeans分類前,向量做了一次數(shù)據(jù)標(biāo)準(zhǔn)化。

數(shù)據(jù)標(biāo)準(zhǔn)化的目的是通過對(duì)數(shù)據(jù)的每一個(gè)維度的值進(jìn)行重新調(diào)節(jié),使得最終的數(shù)據(jù)向量落在 [0,1]區(qū)間內(nèi),經(jīng)過標(biāo)準(zhǔn)化處理后,原始數(shù)據(jù)轉(zhuǎn)化為無量綱化指標(biāo)測(cè)評(píng)值,各指標(biāo)值處于同一數(shù)量級(jí)別,可進(jìn)行綜合測(cè)評(píng)分析。如果直接用原始指標(biāo)值進(jìn)行分析,就會(huì)突出數(shù)值較高的指標(biāo)在綜合分析中的作用,相對(duì)削弱數(shù)值水平較低指標(biāo)的作用。

我將標(biāo)準(zhǔn)化步驟和kmeans模型做了一個(gè)連接所以都放到了一起,實(shí)現(xiàn)代碼如下:

model = Pipeline([
    ('BN',preprocessing.StandardScaler()),('KMS',KMeans())
])
model.fit(X)
# 保存模型
joblib.dump(model,  "./model/model.pkl")
model = joblib.load("./model/model.pkl")
y_pred = model.predict(X)
# 將預(yù)測(cè)結(jié)果放入向量化的總數(shù)據(jù)里存儲(chǔ)
users['lable'] = y_pred

模型保存并測(cè)試

model = joblib.load("./model/model.pkl")
y_pred = model.predict([X[0]])
y_pred

聚類結(jié)果可視化

使用adviz可視化原理是將一系列多維空間的點(diǎn)通過非線性方法映射到二維空間的可視化技術(shù)來實(shí)現(xiàn)可視化展示。

import matplotlib.pyplot as plt
from pandas.plotting import radviz
"""
adviz可視化原理是將一系列多維空間的點(diǎn)通過非線性方法映射到二維空間的可視化技術(shù),是基于圓形平行坐標(biāo)系的設(shè)計(jì)思想而提出的多維可視化方法。圓形的m條半徑表示m維空間,使用坐標(biāo)系中的一點(diǎn)代表多為信息對(duì)象,其實(shí)現(xiàn)原理參照物理學(xué)中物體受力平衡定理。
       mm維空間的點(diǎn){Ai1,Ai2,...,AimAi1,Ai2,...,Aim}映射到二維可視空間的位置由彈簧引力分析模型確定。
      首先將一個(gè)圓等分成 mm份,等分點(diǎn)的個(gè)數(shù)由數(shù)據(jù)維度決定,記各等分點(diǎn)為{R1,R2,...,RnR1,R2,...,Rn},每個(gè)等分點(diǎn)上固定一個(gè)彈簧,各個(gè)彈簧的彈性系數(shù)不同,彈簧 jj的彈性系數(shù)是AijAij,也就是第 jj維的值,所有mm個(gè)彈簧的另一端軍固定在一個(gè)小圓上,如果這個(gè)小圓最終達(dá)到一個(gè)平衡位置 Bi={Xi,Yi}TBi={Xi,Yi}T,則彈力平衡點(diǎn) {Xi,Yi}{Xi,Yi}就是m維空間點(diǎn){ Ai1,Ai2,...,AimAi1,Ai2,...,Aim}在二維空間的投影點(diǎn)。
      博客:https://blog.csdn.net/Haiyang_Duan/article/details/78985225
"""
plt.figure('用戶畫像聚類',figsize=(15, 7.5), dpi=80)
plt.title('radviz')
radviz(users.loc[:,'age':], class_column='lable')
plt.show()

到此這篇關(guān)于基于K-means的用戶畫像聚類模型的文章就介紹到這了,更多相關(guān)K-means用戶畫像聚類模型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python正則表達(dá)式對(duì)字符串的查找匹配

    python正則表達(dá)式對(duì)字符串的查找匹配

    正則表達(dá)式是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為“元字符”),下面這篇文章主要給大家介紹了關(guān)于python正則表達(dá)式對(duì)字符串的查找匹配的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • python抓取網(wǎng)站的圖片并下載到本地的方法

    python抓取網(wǎng)站的圖片并下載到本地的方法

    今天小編就為大家分享一篇python抓取網(wǎng)站的圖片并下載到本地的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 圖文詳解OpenCV中光流以及視頻特征點(diǎn)追蹤

    圖文詳解OpenCV中光流以及視頻特征點(diǎn)追蹤

    光流是空間運(yùn)動(dòng)物體在觀察成像平面上的像素運(yùn)動(dòng)的瞬時(shí)速度,是利用圖像序列中像素在時(shí)間域上的變化以及相鄰幀之間的相關(guān)性來找到上一幀跟當(dāng)前幀之間存在的相應(yīng)關(guān)系,這篇文章主要給大家介紹了關(guān)于OpenCV中光流以及視頻特征點(diǎn)追蹤的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Python中的"沒有那個(gè)文件"錯(cuò)誤(FileNotFoundError)的解決方法詳解

    Python中的"沒有那個(gè)文件"錯(cuò)誤(FileNotFoundError)的解決方法詳解

    在Python編程中,遇到“沒有那個(gè)文件”錯(cuò)誤(FileNotFoundError)是常見的問題之一,本文將詳細(xì)分析這個(gè)錯(cuò)誤的原因,并提供實(shí)用的解決方案和指南,有需要的可以參考下
    2024-11-11
  • 利用Python實(shí)現(xiàn)Shp格式向GeoJSON的轉(zhuǎn)換方法

    利用Python實(shí)現(xiàn)Shp格式向GeoJSON的轉(zhuǎn)換方法

    JSON(JavaScript Object Nonation)是利用鍵值對(duì)+嵌套來表示數(shù)據(jù)的一種格式,以其輕量、易解析的優(yōu)點(diǎn),這篇文章主要介紹了利用Python實(shí)現(xiàn)Shp格式向GeoJSON的轉(zhuǎn)換,需要的朋友可以參考下
    2019-07-07
  • 剖析Django中模版標(biāo)簽的解析與參數(shù)傳遞

    剖析Django中模版標(biāo)簽的解析與參數(shù)傳遞

    這篇文章主要介紹了剖析Django中模版標(biāo)簽的解析與參數(shù)傳遞,Django是重多高人氣Python框架中最為著名的一個(gè),需要的朋友可以參考下
    2015-07-07
  • 詳解Selenium中元素定位方式

    詳解Selenium中元素定位方式

    測(cè)試對(duì)象的定位和操作是我們利用 selenium 編寫自動(dòng)化腳本和 webdriver 的核心內(nèi)容。本文我們就來學(xué)習(xí)一下常用的元素定位方法有哪些吧
    2022-06-06
  • Python pymysql操作MySQL詳細(xì)

    Python pymysql操作MySQL詳細(xì)

    pymysql是Python3.x中操作MySQL數(shù)據(jù)庫的模塊,其兼容于MySQLdb,使用方法也與MySQLdb幾乎相同,但是性能不如MySQLdb,但是由于其安裝使用方便、對(duì)中文兼容性也更好等優(yōu)點(diǎn),被廣泛使用。可以使用pip install pymysql進(jìn)行安裝。
    2021-09-09
  • Python使用Transformers實(shí)現(xiàn)機(jī)器翻譯功能

    Python使用Transformers實(shí)現(xiàn)機(jī)器翻譯功能

    近年來,機(jī)器翻譯技術(shù)飛速發(fā)展,從傳統(tǒng)的基于規(guī)則的翻譯到統(tǒng)計(jì)機(jī)器翻譯,再到如今流行的神經(jīng)網(wǎng)絡(luò)翻譯模型,尤其是基于Transformer架構(gòu)的模型,翻譯效果已經(jīng)有了質(zhì)的飛躍,本文將詳細(xì)介紹如何使用Transformers庫來實(shí)現(xiàn)一個(gè)機(jī)器翻譯模型,需要的朋友可以參考下
    2024-11-11
  • Pytorch?nn.Unfold()?與?nn.Fold()圖碼詳解(最新推薦)

    Pytorch?nn.Unfold()?與?nn.Fold()圖碼詳解(最新推薦)

    這篇文章主要介紹了Pytorch?nn.Unfold()?與?nn.Fold()圖碼詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05

最新評(píng)論

隆德县| 六安市| 榆中县| 集贤县| 安溪县| 丽江市| 建德市| 子长县| 阿尔山市| 青阳县| 海原县| 巴南区| 怀远县| 磐石市| 舒兰市| 团风县| 阳高县| 淳化县| 桦甸市| 桃园市| 连州市| 慈溪市| 康保县| 翁源县| 金溪县| 贡嘎县| 萝北县| 南丹县| 西华县| 巩义市| 霍林郭勒市| 东阿县| 浦东新区| 高要市| 高台县| 木兰县| 进贤县| 汉阴县| 滦平县| 修水县| 辉南县|