失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 机器学习实战-聚类分析KMEANS算法-25

机器学习实战-聚类分析KMEANS算法-25

时间:2018-09-02 11:18:49

相关推荐

机器学习实战-聚类分析KMEANS算法-25

KMEANS算法-NBA球队实力聚类分析

from sklearn.cluster import KMeansimport numpy as npimport matplotlib.pyplot as pltimport pandas as pdfrom sklearn.preprocessing import MinMaxScaler

data = pd.read_csv('nba.csv')data.head()

minmax_scaler = MinMaxScaler()# 标准化数据X = minmax_scaler.fit_transform(data.iloc[:,1:])X[:5]

# 肘部法则loss = []for i in range(2,10):model = KMeans(n_clusters=i).fit(X)loss.append(model.inertia_)plt.plot(range(2,10),loss)plt.xlabel('k')plt.ylabel('loss')plt.show()

k = 4model = KMeans(n_clusters=k).fit(X)# 将标签整合到原始数据上data['clusters'] = model.labels_data.head()

for i in range(k):print('clusters:',i)label_data = data[data['clusters'] == i].iloc[:,0]print(label_data.values)

KMEANS算法-广告效果聚类分析

import numpy as npimport pandas as pdfrom sklearn.preprocessing import MinMaxScalerfrom sklearn.cluster import KMeans import matplotlib.pyplot as pltimport seaborn as sns%matplotlib inline# 显示中文plt.rcParams['font.family'] = ['sans-serif']plt.rcParams['font.sans-serif'] = ['SimHei']

# 载入数据,空格为间隔df = pd.read_csv('ad_performance.txt', delimiter='\t')# 数据概观df.tail(5)

df.isnull().sum()

df.describe().round(3)

plt.figure(figsize=(12,10)) # 画热力图,数值为两个变量之间的相关系数p=sns.heatmap(df.corr(), annot=True) plt.show()

# 使用平均值替换缺失值df['平均停留时间'] = df['平均停留时间'].fillna(df['平均停留时间'].mean())# 字符串分类转整数分类conver_cols = ['素材类型', '广告类型', '合作方式', '广告尺寸', '广告卖点']# 用get_dummies进行one hot编码dummy_df = pd.get_dummies(df[conver_cols])# 清除原来的特征df2 = df.drop(conver_cols, axis=1) # 当axis = 1的时候,concat就是行对齐,然后将不同列名称的两张表合并df2 = pd.concat([df2, dummy_df], axis=1)

df2.tail().T

# 获取数值特征转换成矩阵scale_matrix = df2.iloc[:, 1:8]# 建立MinMaxScaler模型对象minmax_scaler = MinMaxScaler()# 标准化数据df2.iloc[:, 1:8] = minmax_scaler.fit_transform(scale_matrix)X = np.array(df2.iloc[:,1:])# 肘部法则loss = []for i in range(2,10):model = KMeans(n_clusters=i).fit(X)loss.append(model.inertia_)plt.plot(range(2,10),loss)plt.xlabel('k')plt.ylabel('loss')plt.show()

k = 4model = KMeans(n_clusters=k).fit(X)# 将最优情况的标签整合到原始数据上df['clusters'] = model.labels_# 每个聚类的样本量cluster_count = pd.DataFrame(df.clusters.value_counts()).rename(columns={'clusters': 'counts'})# 获取样本占比cluster_count['percentage'] = (cluster_count['counts']/cluster_count['counts'].sum()).round(2)cluster_count.head()

# 设置颜色colors='yellowgreen','gold','lightskyblue','lightcoral'# 设置分离explode=0.1,0.1,0.1,0.1# 设置画幅plt.figure(figsize=(5, 5))# 作图plt.pie(cluster_count.counts,explode=explode,labels=cluster_count.index,colors=colors,autopct='%1.1f%%',shadow=True)plt.show()

df.describe()

# 空列表,用于存储最终合并后的所有特征信息cluster_features = [] # 读取每个类索引for line in range(k): # 获得特定类的数据label_data = df[df['clusters'] == line] # 获得数值型数据特征part1_data = label_data.iloc[:, 1:8] # 得到数值型特征的描述性统计信息part1_desc = part1_data.describe().round(3) # 得到数值型特征的均值merge_data1 = part1_desc.iloc[1, :] # 获得字符串型数据特征part2_data = label_data.iloc[:, 8:-1] # 获得字符串型数据特征的描述性统计信息part2_desc = part2_data.describe(include='all') # 获得字符串型数据特征的最频繁值merge_data2 = part2_desc.iloc[2, :] # 将数值型和字符串型典型特征沿行合并merge_line = pd.concat((merge_data1, merge_data2), axis=0) # 将每个类别下的数据特征追加到列表cluster_features.append(merge_line) # 将列表转化为矩阵cluster_pd = pd.DataFrame(cluster_features) # 将信息合并all_cluster_set = cluster_count.join(cluster_pd).sort_index().Tall_cluster_set

聚类0:各方面的特征都不明显,换句话说就是效果比较平庸,没有明显的优势或短板。但这些“中庸”的广告媒体却构成了整个广告的主体。因此需要业务部门重点考虑其投放的实际价值。

聚类1:这类广告媒体在访问深度、平均停留时间、订单转化率以及平均搜索量等流量质量的特征上的表现较好,除了注册转化率较低外,该类渠道各方面比较均衡。更重要的是该类媒体的数量占据了31%的数量,因此是一类规模较大且综合效果较好的媒体。聚类1的广告渠道的短板是日均UV和平均注册率,因此该类媒体无法为企业带来大量的流量以及新用户。不过这类广告订单转化率高适合有关订单转化的提升。

聚类2:这类广告媒体渠道效果很好,特别是日均UV和用户停留时间表现很好,但综合其只占8%的媒体数量,由于实例比较少,不排除是因为个例导致效果扩大,可以合理增加此类渠道投放,继续深入测试其真实效果。

聚类3:这类渠道其日均UV还不错,平均注册率非常突出,证明这是一类“引流”+“拉新”的渠道,适合在大规模的广告宣传和引流时使用。

如果觉得《机器学习实战-聚类分析KMEANS算法-25》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。