Python机器学习及分析工具:Scipy篇

Scipy是一个用于数学、科学、工程领域的常用软件包,可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。它用于有效计算Numpy矩阵,使Numpy和Scipy协同工作,高效解决问题。
  Scipy是由针对特定任务的子模块组成:

模块名应用领域
scipy.cluster向量计算/Kmeans
scipy.constants物理和数学常量
scipy.fftpack傅立叶变换
scipy.integrate积分程序
scipy.interpolate插值
scipy.io数据输入输出
scipy.linalg线性代数程序
scipy.ndimagen维图像包
scipy.odr正交距离回归
scipy.optimize优化
scipy.signal信号处理
scipy.sparse稀疏矩阵
scipy.spatial空间数据结构和算法
scipy.special一些特殊的数学函数
scipy.stats统计

scipy.cluster -----向量计算/Kmeans

scipy.cluster是scipy下的一个做聚类的package, 共包含了两类聚类方法:

  1. 矢量量化(scipy.cluster.vq):支持vector quantization 和 k-means 聚类方法
  2. 层次聚类(scipy.cluster.hierarchy):支持hierarchical clustering 和 agglomerative clustering(凝聚聚类)
###cluster.py
#导入相应的包
import scipy
import scipy.cluster.hierarchy as sch
from scipy.cluster.vq import vq,kmeans,whiten
import numpy as np
import matplotlib.pylab as plt


#生成待聚类的数据点,这里生成了20个点,每个点4维:
points=scipy.randn(20,4)  

#1. 层次聚类
#生成点与点之间的距离矩阵,这里用的欧氏距离:
disMat = sch.distance.pdist(points,'euclidean') 
#dismat是一个列表(i->i+1...)
#进行层次聚类:
Z=sch.linkage(disMat,method='average') 
#将层级聚类结果以树状图表示出来并保存为plot_dendrogram.png
P=sch.dendrogram(Z)
plt.savefig('plot_dendrogram.png')
#根据linkage matrix Z得到聚类结果:
cluster= sch.fcluster(Z, t=1, 'inconsistent') 

print( "Original cluster by hierarchy clustering:\n",cluster)

#2. k-means聚类
#将原始数据做归一化处理
data=whiten(points)

#使用kmeans函数进行聚类,输入第一维为数据,第二维为聚类个数k.
#有些时候我们可能不知道最终究竟聚成多少类,一个办法是用层次聚类的结果进行初始化.当然也可以直接输入某个数值. 
#k-means最后输出的结果其实是两维的,第一维是聚类中心,第二维是损失distortion,我们在这里只取第一维,所以最后有个[0]
centroid=kmeans(data,max(cluster))[0]  

#使用vq函数根据聚类中心对所有数据进行分类,vq的输出也是两维的,[0]表示的是所有数据的label
label=vq(data,centroid)[0] 

print( "Final clustering by k-means:\n",label)

scipy.optimize | 优化

scipy.optimize模块提供了函数最值、曲线拟合和求根的算法。

from scipy import optimize
import numpy as np
import matplotlib.pyplot as plt

#定义目标函数
def f(x):
    return x**2+10*np.sin(x)

#绘制目标函数的图形
plt.figure(figsize=(10,5))
x = np.arange(-10,10,0.1)
plt.xlabel('x')
plt.ylabel('y')
plt.title('optimize')
plt.plot(x,f(x),'r-',label='$f(x)=x^2+10sin(x)$')
#图像中的最低点函数值
a = f(-1.3)
plt.annotate('min',xy=(-1.3,a),xytext=(3,40),arrowprops=dict(facecolor='black',shrink=0.05))
plt.legend()
plt.show()

scipy.constants

scipy的constants模块包含了大量用于科学计算的常数

from scipy import constants as C
#圆周率
print(C.pi)
#黄金比例
print(C.golden)
#真空中的光速
print(C.c)
#普朗克常数
print(C.h)
#一英里等于多少米
print(C.mile)
#一英寸等于多少米
print(C.inch)
#一度等于多少弧度
print(C.degree)
#一分钟等于多少秒
print(C.minute)
#标准重力加速度
print(C.g)

scipy.integrate

import numpy as np  
from scipy.integrate import tplquad,dblquad,quad
 
#积分
val1,err1=quad(lambda x:np.sin(x),#函数
               0,#x下界0
               np.pi)#x上界pi
print ('积分结果:',val1)
 
#二重积分
val2,err2=dblquad(lambda y,x:np.sin(x)*np.cos(y),#函数
                  0,#x下界0
                  np.pi,#x上界pi
                  lambda x:x**2,#y下界x^2
                  lambda x:2*x)#y上界2*x
print ('二重积分结果:',val2)
 
#三重积分
val3,err3=tplquad(lambda z,y,x:1/(np.sqrt(x+y**2+z**3)),#函数
                0,#x下界0
                1,#x上界1
                lambda x:-x,#y下界-x
                lambda x:x,#y上界x
                lambda x,y:np.sin(x),#z下界sin(x)
                lambda x,y:x+2*y)#z上界x+2*y
print ('三重积分结果:',val3

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值