聚类
k-means 聚类
聚类分析的代价函数:
在式子中, c(i) c ( i ) 表示为离第i个样本最近的类的索引,取值范围[1,K]; μ1,μ2,⋯,μk μ 1 , μ 2 , ⋯ , μ k 表示k个类的重心; μ(i)c μ c ( i ) 表示离第i个样本最近类即第 μ(i)c μ c ( i ) 个类的中心点。
使得下面的公式最小化:
k-means 的一个问题时,他可能会停留在一个局部最优处,这取决于初始化的情况
解决办法:多次运行K-means算法,每一次都是随机初始化,最后再比较多次运行的结果,选择代价函数 J() J ( ) 最小的结果。
聚类数的选择
- 根据目标来选择
- “肘部法则”,类的个数对应的点叫做“肘点”
降维(Dimensionality Reduction)
降维的原因是特征之间存在冗余
PCA(principal component analysis)
pca技术的有点是完全无参数限制的,降维只与数据有关,与用户无关;而恰恰这种优点也是它的缺点所在,当用户对观测对象有了一定的先验知识的时候,不能通过参数化等方法进行干预,可能得不到预期的效果。
pca,找到一个方向向量,k维(把n维数据压缩到k维数据),当把所有数据都投射到该向量之上,使得投射平均均方误差最小,也叫做是投射误差(projected error)。
pac算法步骤:
- 将数据归一化,也就是标准化处理 [消除量纲带来的影响]
- 计算协方差矩阵 Σ Σ
- 计算协方差矩阵
Σ
Σ
的特征向量
在求解协方差矩阵 Σ Σ 的特征向量的时候会用到奇异值分解(sigular value decomposition)
[U,S,V]=svd(Σ) [ U , S , V ] = s v d ( Σ )
Σ=1m∑i=1m(x(i))(x(i))T Σ = 1 m ∑ i = 1 m ( x ( i ) ) ( x ( i ) ) T
U是一个具有与数据之间最小投射误差的方向向量构成的矩阵。从U中选取前K个向量得到一个n*k维度的矩阵,用
Ureduce
U
r
e
d
u
c
e
表示–实际应用中要看原始数据矩阵的形式,是列是特征,还是行是特征–通过向量
Ureduce
U
r
e
d
u
c
e
我们就可以对原始数据进行降维。
使用压缩后的数据可用来进行预测,预测值进行重建[reconstruction from compressed representation]即把数据从k维还原到n维。
主成分分析,其实就是对原始数据进行基变换,使得数据在新基(新的坐标系)下,某些基上方差很大,而在其余基上很小。达到用k个基却能表示原数据的绝大部分信息。而奇异值分解就能达到这个目的
奇异值分解:
https://blog.youkuaiyun.com/shenziheng1/article/details/52916278
python中数据的合并
pd.concat(objs, axis=0, join=’outer’, join_axes=None, ignore_index=False,keys=None, levels=None, names=None,verify_integrity=False,copy=True)
- objs指定连接对象,可以是series , datafram
- axis 指定连接是按照行(axis=1)还是按照列(axis=0)进行连接,默认是按照列合并
join默认为outer,表示并集,inner表示交集
append()方法表示:横向和纵向同时扩充,不考虑columns和index
pd.merge(left, right, how=’inner’, on=None, left_on=None, right_on=None,left_index=False, right_index=False, sort=True,suffixes=(‘_x’, ‘_y’), copy=True, indicator=False)left左边连接对象
- right 右边连接对象
- left 左边的连接对象
dataframe.to_csv()
str()强制类型转换
extend()函数用于在列表末尾一次性追加另一个序列中的多个值;
ps:该方法没有返回值,但会在已存在的列表中添加新的列表内容。
aList = [123, 'xyz', 'zara', 'abc', 123]
bList =[2009, 'manni']
aList.extend(bList)
print(aList.extend(bList)) //输出值为None
print(aList) //输出值为[123, 'xyz', 'zara', 'abc', 123, 2009, 'manni', 2009, 'manni']
shape返回对象的维度,返回值类型是元组
c=np.array([[1,2],[2,3],[4,5],[6,5]])
print(c)
print(c.shape,c.shape[0],c.shape[1]) //(4,2) 4 2
np.load()和np.save() 用来保存Numpy专用的存取数据,数据类型为二进制类型保存数据。保存在后缀文件名.npy的文件中。
A=np.arange(15).reshape(3,5)
np.save("A.npy",A)
B=np.load("A.npy")
print(B)
to_csv() 和 read_csv()
g=[1,2,3]
h=[4,5,6]
d=pd.DataFrame({"g_name":g,"h_name":h})
d.to_csv("d.csv",sep=',',index=False)
huha=pd.read_csv("d.csv")
print(huha)
结果如下:
g_name h_name
0 1 4
1 2 5
2 3 6
DataFrame()
创建一个数据框,一个表格型的数据结构.
DataFrame(data,columns = [‘col0’,’col1’,’col2’]) 传入columns参数指定列的顺序
Series(data,index)
生成一维数组
append()
List.append(object)
函数没有返回值,只是在List对象最后面的元素追加为Object
注意append和extend的区别
h.append(g)
print(h)
结果:
[4, 5, 6, [1, 2, 3]]
del h[3]
h.extend(g) //extend函数用于在列表末尾一次性追加另一个序列中的多个值
print(h)
结果:
[4, 5, 6, 1, 2, 3]