小编最近在学习机器学习的基础知识,为巩固知识,整理出基本要点,更好的学习理解
—1.机器学习使计算机能够从研究数据和统计信息中学习 2.机器学习是迈向人工智能方向的第一步 3.机器学习是一种程序,可以分析数据并学习和运行结果
2.数据集:任何数据集合,可以是数组到完整数据库的任何内容
3.数据类型:1.数值:离散类型(整数),连续数据(具有无限值的数据)
2.分类:无法度量的值(颜色值或任何yes/no)
3.序数:可以相互度量
1.均值–平均值(使用numpy模块)
**使用numpy.mean()
import numpy
v=[99,25,43,64]
x=numpy.mean(v)
print(x)
2.中值–(从小到大排列一列数然后寻找最中间的一个数(奇数)或者计算中间两个数的平均值(偶数))
**使用numpy.median()
import numpy
v=[99,25,43]
x=numpy.median(v)
print(x)#会自动排序并输出
3.众数–出现次数最多的数(使用SciPy模块)
**使用scipy mode()
from scipy import stats
v=[99,25,43,99]
x=scipy.mode(v)
print(x)
1.低标准偏差表示大多数字接近平均值,高标准偏差表示大多数字分布在更宽的范围内 2.Numpy std()方法可以查找标准差 import numpy v=[86,87,22,85,84] s=numpy.std(v) print(s)
方差的平方根,会得到标准差
1.Numpy var()方法可以确定方差
import numpy
v=[32,111,138,28,59,77,99]
x=numpy.var(v)
print(x)
统计学中使用百分位数提供一个数字,该数字描述了给定百分比值小于的值
1.Numpy percetile(object,目标数)方法查找百分位数
import numpy
v=[5,31,43,48,50,47,7,11,15,39,80,82,32,8,6,25,36,27,61,31]
x=numpy.percetle(v,75)
print(x)
75百分数:75%的x值是结果值及以下
NumPy,附带了许多创建任意大小的随机数据集的方法
import numpy x=numpy.random.uniform(0.0,5.0,250) print(x)
1.直方图(为了可视化数据集)hist绘制直方图
代码:
`import numpy
import matplotlib.pyplot as plot
x=numpy.random.uniform(0.0,5.0,250)
plot.hist(x,5)
plot.show() `
#生成250个数据,x轴代表生成的数据是0.0-5.0之间的随机数由5栏表示
y轴表示在每个分隔段数据的个数!
2.大数据分布:包含250个的数据集认为不够大可以创建一个随机的值,并且通过更改参数,可以创建所需大小的数据集
eg:import numpy
import matplotlib.pyplot as plt
x=numpy.random.uniform(0.0,5.0,1000)
plt.hist(x,100)
plt.show().
又称为高斯数据分布或钟形曲线
使用numpy.random.normal()方法创建的数组
import numpy import matplotlib.pyplot as plt x=numpy.random.normal(5.0,1.0,100000) plt.hist(x,100) plt.show()
代码解释
1.创建的数组(具有100000个值)绘制具有100栏的直方图
2.指定平均值为5.0,标准差为1.0(值集中到5.0左右,很少偏离1.0)
3.大多值在4.0到6.0之间,最高值大约是5.0
1.新建画布(可以根据实际情况省略)
`matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, clear=False, **kwargs)`
num:int or str or Figure,optional 一个唯一的标识符
figsize:画布的宽度和高度,单位为英寸,默认值为(6.4,4.8)
dpi:每英寸的像素个数,默认100
facecolor:背景颜色,default:rcParams"figure.facecolor"]
edgecolor:边框颜色,default:rcParams"figure.edgecolor"]
matplotlib.pyplot.plot(*args,scalex=True,scaley=True,date=None,**kwargs)
x=[1,2,3] y=[1,2,3] #以下两种写法等价, plt.plot(x,y,color='green',marker='o',linestyle=;dashed',linesize=2,marksize=12 plt.plot(x,y,'go--',linesize=2,marksize=12 #可以在一张图中画好多条折线 y1=[4,5,6] plt.plot(x,y1,color='red',marker='o',linestyle=;dashed',linesize=2,marksize=12
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
import numpy as np
import matplotlib.pyplot as plt
x=[1,2,3,4,5]
y=np.random.rand(5)#5个随机数据
plt.figure(figsize=(8,4))
plt.bar(x,y)
x_=list(ramge(len(x))
name_list=['yueyue','lmm','lym','jie','num']
plt.xticks(x,x_)#设置x轴刻度
plt,show()
#plt.ba(range(len(x)),y,tick_label=name_list,bottom)
import matplotlib.pyplot as plt
import numpy as np
name_list=name_list=['yueyue','lmm','lym','jie','num']
x=[52.1,49.3,72.5,69.8,67.52]
plt.barh([1,2,3,4,5],x,left=[1,2,1,2,1],tick_label=name_list)
plt.ylabel(" ")#设置y轴坐标标签
plt.show()
import matplotlib.pyplot as plt
x=[15,25,35,25]
name=['A','B','C','D']
label=['15%','25%','35%','25%']#标注对应的刻度
color=['#14615E','#F46C40','#3E95C0','#A17D3B']
plt.pie(x,label=name,colors=color ,autopct='%d%%')
plt.axis('equal')#刻度等长
plt.show()
import nump as np
import matplotlib.pyplot as plt
N=10
x=np.random.rand(N)
y=np.random.ramd(N)
x1=np.random.ramd(N)
x2=np.random.ramd(N)
plt.scatter(x,y,color='red',marker='^',label='red')
plt.legend(loc='upper left')
plt.scatter(x1,y2,color='red',marker='^',label='red')
plt.legend(loc='best')#在左上角最好的位置设置标签
plt.xlabel('x轴')#给横坐标添加标签
plt.ylabel('y轴')#给纵坐标添加标签
plt.show()
p1=huaban.add_subplot(221)
p2=huaban.add_subplot(222)
p3=huaban.add_subplot(221)
p4=huaban.add_subplot(222)
#这些数字的意思是,把画板分成两行两列,四个位置,p1在位置1,p2在位置2.......
import numpy as np
import matplotlib.pyplot as plt
x=range(-10,10)
y=np.random.rand(20)
huaban=fi.figure(facecolor='pink',figsize=(8,8),dpi=100)
p1=huaban.add_subplot(221)
x=np.random.rand(10)
p1.plot(x,np.sin(x),label='sinx',marker='o')
plt.legend(loc='best')
plt.grid(c='r',linestyle=':')
p2=huaban.add_subplot(222)
x1=np.linespace(-np.pi*2,np.pi*2,1000)
y1=np.sin(x1)
p2.plot(x1,y1,label='sinx',color='best')
plt.legend(loc='best')
plt.grid(c='b',linestyle='--')
p3=huaban.add_subplot(223)
N=10
x=np.random.rand(N)
y=np.random.ramd(N)
x1=np.random.ramd(N)
x2=np.random.ramd(N)
plt.scatter(x,y,color='red',marker='^',label='red')
plt.scatter(x1,y2,color='red',marker='^',label='red')
p4=huaban.add_subplot(224)
x=np.random.rand(10)
p1.plot(x,np.cos(x),label='sinx',marker='o')
plt.legend(loc='best')
plt.grid(c='c',linestyle=':')
plt.show()
需要中文标注 plt.rcParams[‘font.sans-serif’] = [‘SimHei’]
显示负号 plt.rcParams[‘axes.unicode_minus’] = False
线性回归是指使用数据点之间的关系在所有数据点之间画一条直线,尽可能的使预测结果更加准确
1.导入scipy并绘制线性回归线:
import matplotlib.pyplot as plt
from scipy import stats
2.创建x,y数值的数组
x=[5,7,8,7,2,17,2,9]
y=[99,86,81,88,111,86,103,87]
3.执行一个方法,返回一些重要的键值,slope是指使用斜率,intercept是指截距,r是指相关性指数
slope, intercept, r, p, std_err = stats.linregress(x, y)
4.定义一个函数计算统计slope,intercept所返回值,这个新值表示相应的x值在y轴上放置的位置,map在这里的意思是映射的意思,会根据提供的函数对指定序列做映射。
map函数会返回一个迭代器,如果要转换为列表,可以使用 list() 来转换。
def myfunc(x):
return slope * x + intercept
y1= list(map(myfunc,x))
5.展示原始散点图和线性回归直线
plt.scatter(x,y)
plt.plot(x,y1)
plt.show()
重要的是知道x轴与y轴之间的关系,如果没有关系,线性回归不能预测任何东西
r**2的值是[0,1],0表示不相关,1表示100%相关
可以查看拟合度的代码
from scipy import stats
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
slope, intercept, r, p, std_err = stats.linregress(x, y)
def myfunc(x):
return slope * x + intercept
speed = list(map(myfunc,x)
print(r)
多项回归使用变量x与y之间的关系绘制数据点线的最佳方法
1.导入所需模块
import numpy
import matplotlib.pylot as plt
2.创建x,y数轴的数值
x=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]
y=[100,90,80 60,60,55,60,65,60,65,60.60,70,70,75,76,78,79,90,99,99,100]
3.Numpy中有一种方法可以建立多项式模型
d=numpy.poly1d(numpy.polyfit(x,y,3))
4.指定行的显示方式,从1-22
line=numpy.linspace(1,22,100)
5.绘制原始散点图和多项式回归线
plt.scatter(x,y)
plt.plot(line,d(line))
plt.show()
(1).np.poly1d()此函数有两个参数:
参数1:为一个数组,若没有参数2,则生成一个多项式,例如:
p = np.poly1d([2,3,5,7])
print§==>>2x3 + 3x2 + 5x + 7 数组中的数值为coefficient(系数),从后往前 0,1,2.。。为位置书的次数
参数2:若参数2为True,则表示把数组中的值作为根,然后反推多项式,例如:
q = np.poly1d([2,3,5],True)
print(q) ===>>(x - 2)(x - 3)(x - 5) = x3 - 10x2 + 31x -30
参数3:variable=‘z’表示改变未知数的字母,例如:
q = np.poly1d([2,3,5],True,varibale = ‘z’)
print(q) ===>>(z - 2)(z - 3)(z - 5) = z3 - 10z2 + 31z -30
(2)
polyfit(x, y, deg):
x:M个采样点的横坐标数组;
y:M个采样点的纵坐标数组;y可以是一个多维数组,这样即可拟合相同横坐标的多个多项式;
deg:多项式阶数。
(3)
linspace(start,stop,num)
start
start 参数数值范围的起始点。如果设置为0,则结果的第一个数为0.该参数必须提供。
stop
stop 参数数值范围的终止点。通常其为结果的最后一个值,但如果修改endpoint = False, 则结果中不包括该值(后面示例会说明)。
num (可选)
num 参数控制结果中共有多少个元素。如果num=5,则输出数组个数为5.该参数可选,缺省为50.
同线性回归R**2相同,直接列出代码
import numpy
from sklean.meterics import r2_score#随机森林
x=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]
y=[100,90,80,60,60,55,60,65,70,70,70,75,76,78,79,90,99,99,90,100]
my=numpy.poly1d(numpy.polyfit(x,y,3))
print(r2_score(y,my(x))
如果拟合度过低则告诉我们不适合多项式项目
import numpy
from sklean.meterics import r2_score#随机森林
x=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]
y=[100,90,80,60,60,55,60,65,70,70,70,75,76,78,79,90,99,99,90,100]
my=numpy.poly1d(numpy.polyfit(x,y,3))
t=my(23)
print(t)
pandas模块允许导入一个csv文件并返回一个DataFrame对象
sklearn
多元回归同线性回归1一样虽然有多个独立值,我们试图基于两个或多个变量来测量一个值
列出独立值,并将变量命名为X,并将相关列表命名为小写y
1.读取数据,导入模块
from matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression#用LinearRegression创建一个线性回归对象
from mpl_toolkits.mplot3d import Axes3D#绘制3D模型
from numpy as np
#from pandas
data=np.loadtext('data.csv',delimiter=',')#导入数据
#data=pandas.read_csv('data.csv')
x_data=data[:,0:-1]#特征:前两列
y_data=data[:,-1]#标签(所预测数据)(最后一列)
#X=['1号数据','2号数据']
#y=['预测数据']
2.训练模型
训练模型,并输出所求得的相关参数。并做预测进行测试LinearRegression有一个名为fit()的方法,该方法将独立值和从属值作为参数,并用描述这种关系的数据填充回归对象:
model=LinearRegression()
model.fit(x_data,y_data)#训练模型
#构建测试样本
x_test=[[102,4]]
predict=model.predict(x_test)
print(predict)
3.可视化
x_1=x_data[:,0]#第一列数据
x_2=x_dat[:,1]#第二列数据
x_1,x_2=np.meshgrid(x_0,x_1)
y_hat=model.intercept+model.coef_[0]*x_[1]+model.coef_[1]*x_2
fig=plt.figure()
ax=Axes3D(fig)
ax.scatter(x_data[:,0],x_data[:1],y_data)
ax.plot_surface(x_1,x_2,y_hat)
ax.set_xlabel("x1")
ax.set_ylabel("x2")
ax.set_zlabel("y")
plt.show()
当数据拥有不同的值,甚至不同的度量单位时,很难比较,缩放为易于比较的值,缩放为可比较的值,可以很容易的看到一个值与另一个值相比有多少,这就是标准化的过程
z=(x-u)/s
z是新值,x是原始值,u是平均值,s是标准差
StandardScaler()可以返回带有转换数据集方法的scaler对象
import pandas
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
scale=StandardScaler()
data=np.loadtext('data.csv',delimiter=',')#导入数据
x_data=data[:,0:-1]#特征:前两列
#X=['1号数据','2号数据']
scaledX = scale.fit_transform(x_data)
print(scaledX)
例子
import pandas
from sklearn import linear_model
from sklearn.preprocessing import StandardScaler
scale = StandardScaler()
df = pandas.read_csv("cars2.csv")
X = df[['Weight', 'Volume']]
y = df['CO2']
scaledX = scale.fit_transform(X)
regr = linear_model.LinearRegression()
regr.fit(scaledX, y)
scaled = scale.transform([[2300, 1.3]])
predictedCO2 = regr.predict([scaled[0]])
print(predictedCO2)
训练/测试是一种测量模型准确的方法
数据集:训练集(80%)和测试集(20%)
训练集应该是原始数据的 80% 的随机选择。
测试集应该是剩余的 20%。
train_x = x[:80] train_y = y[:80]
test_x = x[80:] test_y = y[80:]
sklearn模块有一个名为rs_score()的方法可以找到x,y的相关性
使用随机森林
from matplotlib.pyplot as plt
from sklearn.metrics import r2_score
from numpy as np
numpy.random.seed(2)#产生两个随机数
#from pandas
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:]
my=numpy.poly1d(numpy.polyfit(train_x,train_y,4))
r2=r2_score(test_y,my(test_x))
#r2=r2_score(train_y,my(train_x))
print(r2)
决策树是一种流程图,可以帮助负责人根据之前的经验进行决策,数据必须都是数字
1.导入模块,读取数据集
import pandas
from sklearn import tree
import pydotplus
from sklearn.tree inport DecisionTreeClassifier#决策树
import matplotlib.pyplot as plt
import matplotlib.image as plting
df=pandas.read_csv()
features=['Age','Experience','Rank']
X=df[features]
y=df['Go']
创建实际的决策树,然后在计算机上保存一个.png的文件
dtree=DecisionTreeClassifier()#创建一棵树
dtree=dtree.fit(X,y)
data=tree.export_graphviz(dtree,out_file(输出)=None,feature_name(特征列的名字)=features)
graph=pydotplus.graph_from_dot_data(data)
graph.write_png()
img=plting.imread()
imgplot=plt.imshow(img)
plt.show()
预测值
print(dtrr.predict([[10,20,1,3]]))
如果你觉得这篇文章对你有用,建议点赞收藏。
欢迎各位读者指正错误,请在评论区留言。或者发表自己的看法,小编不胜感激。