机器学习(基础)

小编最近在学习机器学习的基础知识,为巩固知识,整理出基本要点,更好的学习理解

1.目的

 —1.机器学习使计算机能够从研究数据和统计信息中学习
 2.机器学习是迈向人工智能方向的第一步
 3.机器学习是一种程序,可以分析数据并学习和运行结果

2.数据集:任何数据集合,可以是数组到完整数据库的任何内容
3.数据类型:1.数值:离散类型(整数),连续数据(具有无限值的数据)
2.分类:无法度量的值(颜色值或任何yes/no)
3.序数:可以相互度量

2.均值,中值,众数

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)

3.标准差(匀方差)———描述数的离散程度

 1.低标准偏差表示大多数字接近平均值,高标准偏差表示大多数字分布在更宽的范围内
 2.Numpy std()方法可以查找标准差
  import numpy
  v=[86,87,22,85,84]
  s=numpy.std(v)
  print(s)

4.方差————指示值的分散程度

方差的平方根,会得到标准差
1.Numpy var()方法可以确定方差
import numpy
v=[32,111,138,28,59,77,99]
x=numpy.var(v)
print(x)

5.百分位数

   统计学中使用百分位数提供一个数字,该数字描述了给定百分比值小于的值

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值是结果值及以下

6.数据分布

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

7.正态数据分布

又称为高斯数据分布或钟形曲线
使用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

8.Matplotlib模块

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"]

折线图plt.plot()
matplotlib.pyplot.plot(*args,scalex=True,scaley=True,date=None,**kwargs)
  • x:横坐标,可选的,默认为range(len(y))
  • y:纵坐标,即数据项,可以是一维或多维的列表或数组
  • markersize:标记大小
  • color:线条颜色
  • marker:数据标记的形状,默认是没有标记
  • linestyle:线条样式,默认为实线
  • linsize:线条尺寸

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

垂直柱状图(plt.bar)
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)

  • x: float or array-like柱子的横坐标
  • height:float or array-like柱子的高度
  • width:float or array-like柱子的宽度,default:0.8
  • bottom:falot or array-like,y轴的起始值,default:0
  • align:柱子与x轴坐标的对齐方式{‘center’,‘edge’},default:‘center’
  • label:list[str]将相应的横坐标替换成标签
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)
水平柱状图(plt.barh())
  • y: float or array-like柱子在y轴的坐标
  • width:float or array-like柱子的宽度,即水平长度
  • height:float or array-like,柱子的高度,与垂直柱状图的宽度相应default:0.8
  • left:float or array-like,每个柱子在x方向的起始坐标 default:0
  • align:柱子同y轴坐标的对齐方式{‘center’,‘edge’},default:‘center’
  • tick_label:list[str]将相应的纵坐标替换成标签
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()
饼状图(plt.pie())
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()
散点图(plt.scatter())
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

9.线性回归

线性回归是指使用数据点之间的关系在所有数据点之间画一条直线,尽可能的使预测结果更加准确
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()
R**2

重要的是知道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)

10.多项式回归

多项回归使用变量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()
注解np.poly1d()and poly.fit() and linsppace()

(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

同线性回归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)

11.多元回归

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

12.缩放

当数据拥有不同的值,甚至不同的度量单位时,很难比较,缩放为易于比较的值,缩放为可比较的值,可以很容易的看到一个值与另一个值相比有多少,这就是标准化的过程
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)

13.训练/测试

训练/测试是一种测量模型准确的方法
数据集:训练集(80%)和测试集(20%)

拆分训练集

训练集应该是原始数据的 80% 的随机选择。

测试集应该是剩余的 20%。

train_x = x[:80] train_y = y[:80]
test_x = x[80:] test_y = y[80:]

R**2

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)

14.决策树

决策树是一种流程图,可以帮助负责人根据之前的经验进行决策,数据必须都是数字
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()

  1. 特征列与目标列分开,特征列是我们尝试从中预测的列,目标列是具有尝试预测值的列
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]]))

最后

如果你觉得这篇文章对你有用,建议点赞收藏。
欢迎各位读者指正错误,请在评论区留言。或者发表自己的看法,小编不胜感激。

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值