基本数值分析
平均数
numpy.mean()
中位数
numpy.median()
众数
from scipy import stats
stats.mode()
标准差
numpy.std()
方差
numpy.var()
百分位数
什么是 75 百分位数?答案是 43,这意味着 75% 的人是 43 岁或以下。
numpy.percentile()
# input:变量,百分值
# 小于百分值的那个数
数据分布
生成随机浮点数组
numpy.random.uniform()
绘制直方图
plt.hist(x,5) #绘制5个直方,代表0-1,1-2,2-3,3-4,4-5
plt.show()#展示
正态分布
numpy.random.normal() #生成正态分布数据
散点图
绘制散点图需要两个长度相同的数组,一个用于x,一个用于y
plt.scatter(x,y)
线性回归
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EZEIE5L9-1627991353398)(D:\A大学\python\pics\3.png)]
线性回归是使用所有数据点的关系在所有数据点直接画一条直线,可以用来预测未来的值。
x9 = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y1 = [99,86,87,88,111,86,103,87,94,78,77,85,86]
slope,intercept,r,p,std_err=stats.linregress(x9,y1)
def func(X):
return slope*X+intercept
mymodel=list(map(func,x9))
plt.plot(x9,mymodel)
r平方
衡量x轴与y轴的关系的值,如果没有关系就不能用来预测
x9 = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y1 = [99,86,87,88,111,86,103,87,94,78,77,85,86]
slope,intercept,r,p,std_err=stats.linregress(x9,y1)
print(r)
多项式回归
如果数据点不适合线性回归(穿过点的直线),那么多项式回归可能是最理想的选项。
#建立多项式模型
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wttIT6YJ-1627991353400)(D:\A大学\python\pics\4.png)]
r平方
from sklearn.metrics import r2_score
r2_score(y,mymodel(x))
多元回归
基于两个或多个变量来预测一个值
import pandas
df=pandas.read_csv("D:/A大学/python/data/cars.csv")
y=df['CO2']
x=df[['Weight','Volume']]
from sklearn import linear_model
reger=linear_model.LinearRegression()
reger.fit(x,y)
predictCO2=reger.predict([[2300,1300]])
print(predictCO2)
系数
系数是描述与未知变量关系的因子。
import pandas
df=pandas.read_csv("D:/A大学/python/data/cars.csv")
y=df['CO2']
x=df[['Weight','Volume']]
from sklearn import linear_model
reger=linear_model.LinearRegression()
reger.fit(x,y)
predictCO2=reger.predict([[2300,1300]])
print(predictCO2)
print(reger.coef_)
- output
[0.00755095 0.00780526]
这些值告诉我们,如果重量增加 1g,则 CO2 排放量将增加 0.00755095g。
如果发动机尺寸(容积)增加 1 ccm,则 CO2 排放量将增加 0.00780526g。
例子
import numpy
from scipy import stats
import matplotlib.pyplot as plt
speed=[99,86,87,111,86,103,87,94,78,77,85,86]
x1=numpy.mean(speed) #平均数
x2=numpy.median(speed) #中位数
x3=stats.mode(speed) #众数
x4=numpy.std(speed) #标准差
x5=numpy.var(speed) #方差
x6=numpy.percentile(speed,80) #百分位数
#直方图
x7=numpy.random.uniform(0.0,5.0,250) #生成随机浮点数组
plt.hist(x7,5)
plt.show()
#正态数据分布
x8=numpy.random.normal(5.0,1.0,1000)
plt.hist(x8,100)
plt.show()
#散点图
x = numpy.random.normal(5.0, 1.0, 1000)
y = numpy.random.normal(10.0, 2.0, 1000) #长度相同
plt.scatter(x,y)
plt.show()
# 线性回归
x9 = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y1 = [99,86,87,88,111,86,103,87,94,78,77,85,86]
slope,intercept,r,p,std_err=stats.linregress(x9,y1)
print(r)
def func(X):
return slope*X+intercept
mymodel=list(map(func,x9))
plt.plot(x9,mymodel)
plt.scatter(x9, y1)
plt.show()
# 多项式回归
from sklearn.metrics import r2_score
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
mymodel=numpy.poly1d(numpy.polyfit(x,y,3))
print(r2_score(y, mymodel(x)))
myline = numpy.linspace(1, 22, 100)
plt.plot(myline,mymodel(myline))
plt.scatter(x, y)
# plt.show()
# 多元回归
import pandas
df=pandas.read_csv("D:/A大学/python/data/cars.csv")
y=df['CO2']
x=df[['Weight','Volume']]
from sklearn import linear_model
reger=linear_model.LinearRegression()
reger.fit(x,y)
predictCO2=reger.predict([[2300,1300]])
print(predictCO2)
print(reger.coef_)
print(x1)
print(x2)
print(x3)
print(x4)
print(x5)
print(x6)
print(x7)
print(x8)
特征缩放
当你的数据拥有不同的度量单位,这样很难进行比较,所以我们要进行特征缩放
缩放数据有多种方法,在本教程中,我们将使用一种称为标准化(standardization)的方法。
标准化方法使用以下公式:
z = ( x − u ) / s z = (x - u) / s z=(x−u)/s
其中 z 是新值,x 是原始值,u 是平均值,s 是标准差。
Python sklearn 模块有一个名为 StandardScaler(),该方法返回带有数据集转换方法的scaler对象。
from sklearn.preprocessing import StandardScalerscale=StandardScaler()ScaleX=scale.fit_transform(x)
#特征缩放import pandasdf=pandas.read_csv("D:/A大学/python/data/cars.csv")y=df['CO2']x=df[['Weight','Volume']]from sklearn import linear_modelfrom sklearn.preprocessing import StandardScalerscale=StandardScaler()ScaleX=scale.fit_transform(x)regr=linear_model.LinearRegression()regr.fit(ScaleX,y)scaled=scale.transform([[2300,1.3]])predictedCO2=regr.predict([scaled[0]])print(predictedCO2)
测试/训练
# 测试/训练from scipy import statsimport matplotlib.pyplot as pltfrom sklearn.metrics import r2_scoreimport pandasfrom sklearn import linear_modelfrom sklearn.preprocessing import StandardScalerimport numpyimport matplotlib.pyplot as pltnumpy.random.seed(2)x = numpy.random.normal(3, 1, 100)y = numpy.random.normal(150, 40, 100) / xtrain_x = x[:80]train_y = y[:80]test_x = x[80:]test_y = y[80:]mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))r2 = r2_score(test_y, mymodel(test_x))print(r2)