本文共 2557 字,大约阅读时间需要 8 分钟。
本文摘录了大量 机器学习算法原理与编程实践_郑捷著_电子工业出版社
的原文。
推荐系统是一种信息过滤系统,用于预测用户对物品的「评分」或「偏好」。
精彩推荐:
因此,如何平衡搜索的广度与深度(精准程度)是推荐系统所要解决的主要问题。
推荐系统着眼于需求二字:
推荐系统通过研究用户的兴趣偏好,由智能算法进行个性化的计算,发现用户的潜在兴趣点,从而引导用户发现需求。
前两种方法较为简单,应用也不广泛。
推荐模型:
预处理策略:
给定要划分的数目 \(k\):
import os import pandas as pdimport syssys.path.append('E:/xinlib')import chaosroot = 'D:/MLBook' + '/chapter04/testdata'os.listdir(root)
['4k2_far.txt', 'figure_0.png', 'figure_1.png', 'figure_2.png', 'figure_3.png', 'testSet.txt']
File2Table
的使用参考:
T = chaos.File2Table(root)for p in T.to_pandas('\t'): break
p.head()
0 | 1 | 2 | |
---|---|---|---|
0 | 1 | 2.7266 | 3.0102 |
1 | 1 | 3.1304 | 2.4673 |
2 | 1 | 3.0492 | 2.525 |
3 | 1 | 3.226 | 3.1649 |
4 | 1 | 2.7223 | 2.5713 |
参考特征列的数据类型转换方法。
p.dtypes
0 object1 object2 objectdtype: object
p[[1, 2]] = p[[1, 2]].astype(float)p[[0]] = p[[0]].astype(int)p.dtypes
0 int321 float642 float64dtype: object
from sklearn.cluster import KMeansfrom pylab import mplmpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题%pylab inline
Populating the interactive namespace from numpy and matplotlib
k = len(set(p[0]))M = p[[1, 2]]kmeans = KMeans(init='k-means++', n_clusters=k)kmeans.fit(M)
KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300, n_clusters=4, n_init=10, n_jobs=1, precompute_distances='auto', random_state=None, tol=0.0001, verbose=0)
ax = p.plot.scatter(x=1, y=0, color='DarkRed', label='feture1')# 将之下这个 data 画在上一个 ax 上面p.plot.scatter(x=2, y=0, color='LightGreen', label='feture2', ax=ax)plt.show()
cluster_centers = pd.DataFrame(kmeans.cluster_centers_, columns=['cluster_centers_1', 'cluster_centers_2'])cluster_centers
cluster_centers_1 | cluster_centers_2 | |
---|---|---|
0 | 3.022117 | 6.007702 |
1 | 8.081695 | 7.975067 |
2 | 2.958321 | 2.985985 |
3 | 6.994380 | 5.054563 |
ax = p.plot.scatter(x=1, y=2, color='DarkBlue', label='数据', s=20)cluster_centers.plot.scatter(x='cluster_centers_1', y='cluster_centers_2', color='LightGreen', label='聚类中心', ax=ax, s=70)plt.show()
转载地址:http://edqyx.baihongyu.com/