机器学习基础知识


[TOC]

基本数值分析

平均数

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)

线性回归

线性回归是使用所有数据点的关系在所有数据点直接画一条直线,可以用来预测未来的值。

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))

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 是标准差。

Python sklearn 模块有一个名为 StandardScaler(),该方法返回带有数据集转换方法的scaler对象。

from sklearn.preprocessing import StandardScaler
scale=StandardScaler()
ScaleX=scale.fit_transform(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
from sklearn.preprocessing import StandardScaler
scale=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 stats
import matplotlib.pyplot as plt
from sklearn.metrics import r2_score
import pandas
from sklearn import linear_model
from sklearn.preprocessing import StandardScaler
import numpy
import matplotlib.pyplot as plt
numpy.random.seed(2)

x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x

train_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)

文章作者: XX
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 XX !
  目录