本章内容主要有一下内容:
1.生成标准正态分布
2.检测正态分布
3.卡方检验
4.独立t分布检验
5.方差检验
6.使用qq图
7.求相关系数
8.构建回归以及拟合回归
9.主成分分析SVD、PCA
(代码均可到同一文件下,故部分代码不包含头文件)
1.生成标准正态分布、检测正态分布
import numpy as np
import scipy.stats as ss
#生成标准正态分布
norm_dist = ss.norm.rvs(size=20)
print(norm_dist)
#检测正态分布
print(ss.normaltest(norm_dist))
2.卡方检验
#独立t分布检验
print(ss.ttest_ind(ss.norm.rvs(size=100),ss.norm.rvs(size=200)))
#结果为:检验统计量,P值
3.独立t分布检验
#独立t分布检验
print(ss.ttest_ind(ss.norm.rvs(size=100),ss.norm.rvs(size=200)))
#结果为:检验统计量,P值
4.方差检验
#方差检验
print(ss.f_oneway([49,50,39,40,43],[28,32,30,26,34],[38,40,45,42,48]))
#结果为:F、P
5.使用qq图
#qq图
#1、检验一组数据是否服从某一分布。2、检验两个分布是否服从同一分布。
#如:横轴为正态分布分位数,纵轴为观察分布的值,得到的散点图
#如果和xy周的角平分线重合则符合分布
from statsmodels.graphics.api import qqplot
from matplotlib import pyplot as plt
plt.show(qqplot(ss.norm.rvs(size=10))) #默认检验是否为正态分布
6.求相关系数
#相关系数
import pandas as pd
s1 = pd.Series([0.1,0.2,1.1,2.4,1.3,0.3,0.5])
s2 = pd.Series([0.5,0.4,1.2,2.5,1.1,0.7,0.1])
#直接求相关系数
print(s1.corr(s2))
#可以指定方法,spearman相关系数
print(s1.corr(s2,method="spearman"))
#使用dataframe直接进相关系数的计算
# 因为dataframe是针对于列相关计算,所以转换成np.array矩阵
df = pd.DataFrame(np.array([s1,s2]).T)
print(df.corr())
print(df.corr(method="spearman"))
7.构建回归以及拟合回归
#回归
x = np.arange(10).astype(np.float).reshape([10,1])
y = x*3 + 4 +np.random.random((10,1))
from sklearn.linear_model import LinearRegression
reg = LinearRegression() #构建线性回归
res = reg.fit(x,y) #拟合
y_pred = reg.predict(x)
print("预测测结果:\n",y_pred,"\n参数:",res.coef_,"截距:",res.intercept_)
8.主成分分析SVD
#主成分分析(PCA)
data = np.array([np.array([2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1]),np.array([2.4,0.7,2.9,2.2,3,2.7,1.6,1.1,1.6,0.9])]).T
print(data)
#注:sklearn里用PCA的是奇异值分解
from sklearn.decomposition import PCA
lower_dim = PCA(n_components=1)
lower_dim.fit(data)
print("奇异值分解降维后信息量:",lower_dim.explained_variance_ratio_,"\n转换后: ",lower_dim.fit_transform(data))
9.主成分分析PCA
def myPCA(data,n_components=0):
mean_vals=np.mean(data,axis=0)
mid=data-mean_vals
cov_mat=np.cov(mid,rowvar=False)
from scipy import linalg
eig_vals,eig_vects=linalg.eig(np.mat(cov_mat))
eig_val_index=np.argsort(eig_vals)
eig_val_index=eig_val_index[:-(n_components+1):-1]
eig_vects=eig_vects[:,eig_val_index]
lower_dim_mat=np.dot(mid,eig_vects)
return lower_dim_mat,eig_vals
data = np.array([np.array([2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1]),np.array([2.4,0.7,2.9,2.2,3,2.7,1.6,1.1,1.6,0.9])]).T
print("PCA方法:",myPCA(data,n_components=1))