扩展库 | 简介 |
---|---|
Numpy | 提供数组支持,以及相应的高效处理函数。 Scipy、Matplotlib、Pandas等库都依赖于它。 |
Scipy | 提供矩阵支持,以及矩阵相关的数值计算模块\ 包含的功能有最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。 |
Matplotlib | 数据可视化工具,作图库 |
Pandas | 数据分析和探索工具 支持类似于SQL的数据增删改查,带有丰富的数据处理函数,支持时间序列分析功能,支持灵活处理缺失数据等。 |
StatsModels | 统计建模和计量经济学,包括描述统计、统计模型估计和推断 StatsModels依赖于Pandas,同时还依赖于patsy(一个描述统计的库)。 |
Scikit-Learn | 支持回归、分类、聚类等机器学习库 Scikit-Learn依赖于Numpy、Scipy和Matplotlib。 |
Keras | 基于Theano的深度学习库,用于建立神经网络以及深度学习模型 |
Gensim | 用来做文本主题模型的库,文本挖掘 处理语言方面的任务,如文本相似度计算、LDA、Word2Vec等 |
1、Scipy
(1)求解非线性方程组
#求解非线性方程组2x1-x2^2=1,x1^2-x2=2
from scipy.optimize import fsolve #导入求解方程组的函数fsolve
def f(x): #定义要求解的方程组
x1 = x[0]
x2 = x[1]
return [2*x1 - x2**2 - 1,x1**2 - x2 -2]
result = fsolve(f,[1,1]) #输入初值(随便都行)并求解
print(result)
(2)数值积分
#数值积分
from scipy import integrate #导入积分函数
def g(x): #定义被积函数
return (1-x**2)**0.5
pi_2,err = integrate.quad(g,-1,1) #得到积分结果和误差
2、Matplotlib
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,10,1000) #指定的间隔内返回均匀间隔的数字
y = np.sin(x) + 1
z = np.cos(x**2) +1
plt.figure(figsize=(8,4)) #设置图像的大小
plt.plot(x,y,label='sinx+1',color="red",linewidth=2) #linewidth线宽
plt.plot(x,z,'b--',label='cosx^2+1')
plt.xlabel('Time(s)') #x轴名称
plt.ylabel('Volt') #y轴名称
plt.title('A Simple Example') #标题
plt.ylim(0,2.2) #显示y轴范围
plt.legend() #显示图例
plt.show() #显示作图结果
输出结果为:
如果图中有中文,无法正常显示。这是由于Matplotlib的默认字体是英文字体,解决方法如下:在作图前指定默认字体为中文字体。
plt.rcParams['font.sans-serif'] = ['SimHei'] #SimHei为黑体
保存图像时,负号可能显示不正常,解决方法:
plt.rcParams['axes.unicode_minus'] = False
3、Pandas
默认的Pandas不能读写Excel文件,需要安装xlrd(读)和xlwt(写)库才能支持Excel的读写。
pip install xlrd
pip install xlwt
(1)创建Series、DataFrame
import pandas as pd
s = pd.Series([1,2,3],index=['a','b','c']) #创建一个序列
d = pd.DataFrame([[1,2,3],[4,5,6]],columns=['a','b','c']) #创建一个表
d2 = pd.DataFrame(s) #用已有的序列创建表
d.head() #预览前5行数据
d.describe() #数据基本统计量
(2)读取文件
#注意文件的路径不能带有中文,否则读取可能出错
pd.read_excel('data.xls') #读取Excel文件,创建DataFrame
pd.read_csv('data.csv',encoding='utf-8') #读取文本文档的数据,一般用encoding指定编码
4、StatsModels
#ADF单位根检验——时间序列平稳检验
from statsmodels.tsa.stattools import adfuller as ADF
import numpy as np
ADF(np.random.rand(100))
结果为:
(1)ADF结果同时小于1%、5%、10%,说明非常好地拒绝该假设(ADF检验的原假设是存在单位根,即时间序列非平稳);
(2)p值非常接近0,拒绝原假设。
5、Scikit-Learn
创建一个简单的线性回归模型:
from sklearn.linear_model import LinearRegression #sklearn是Scikit-Learn的简写
model = LinearRegression() #建立线性回归模型
print(model)
模型(model)用法 | 介绍 | 适用对象 |
---|---|---|
model.fit() | 训练模型 对于监督模型是fit(X,y) 对于非监督模型是fit(X) |
所有模型 |
model.predict(X_new) | 预测新样本 | 监督模型 |
model.predict_proba(X_new) | 预测概率 仅对某些模型有用(比如LR) |
监督模型 |
model.score() | 得分越高,fit越好 | 监督模型 |
model.transform() | 从数据中学到新的“基空间” | 非监督模型 |
model.fit_transform() | 从数据中学到新的基,并将这个数据按照这组“基”进行转换 | 非监督模型 |
Scikit-Learn本身提供了一些实例数据,常见的有安德森鸢尾花数据集、手写图像数据集等。
from sklearn import datasets #导入数据集
iris = datasets.load_iris() #加载鸢尾花数据集
print(iris.data.shape) #查看数据集大小
输出结果为:
(150, 4)
from sklearn import svm
clf = svm.LinearSVC() #建立线性SVM分类器
clf.fit(iris.data,iris.target) #用数据训练模型
clf.predict([[5,3.6,1.3,0.25]]) #训练好模型后,输入新的数据进行预测分类
clf.coef_ #查看模型的参数
输出结果为:
array([0]) #分类为0
array([[ 0.18423955, 0.45122985, -0.8079406 , -0.45071071],
[ 0.05191802, -0.89434397, 0.40513593, -0.93780078],
[-0.85072861, -0.98666791, 1.38094616, 1.86533399]]) #模型的参数
6、Keras
搭建一个多层感知器(MLP):
from keras.models import Sequential
from keras.layers.core import Dense,Dropout,Activation
from keras.optimizers import SGD
model = Sequential() #模型初始化
model.add(Dense(input_dim=12,output_dim=64)) #添加输入层(20节点)、第一隐藏层(64节点)的连接
model.add(Activation('tanh')) #第一隐藏层用tanh作为激活函数
model.add(Dropout(0.5)) #使用Dropout防止过拟合
model.add(Dense(input_dim=64,output_dim=64)) #添加第一隐藏层(64节点)、第二隐藏层(64节点)的连接
model.add(Activation('tanh')) #第二隐藏层用tanh作为激活函数
model.add(Dropout(0.5))
model.add(Dense(input_dim=64,output_dim=1)) #添加第二隐藏层(64节点)、输出层(1节点)的连接
model.add(Activation('sigmoid')) #输出层用sigmoid作为激活函数
sgd = SGD(lr=0.1,decay=1e-6,momentum=0.9,nesterov=True) #定义求解算法
model.compile(loss='mean_squared_error',optimizer=sgd) #编译生成模型,损失函数为平均误差平方和
model.fit(x_train,y_train,nb_epoch=20,batch_size=16) #使用训练集训练模型,x_train,y_train用训练集替换
score = model.evaluate(x_test,y_test,batch_size=16) #测试模型,x_test,y_test用测试集替换
Keras用model.predict()方法给出概率;model.predict_classes()方法给出分类结果。
7、Gensim
Gensim使用Word2Vec:
import gensim,logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s',level=logging.INFO) #logging用来输出训练日志
sentences = [['first','sentence'],['second','sentence']] #分好词的句子,每个句子以词列表的形式输入
model = gensim.models.Word2Vec(sentences,min_count=1) #用以上句子训练词向量模型
print(model['sentence']) #输出单词sentence的词向量