如何用Python实现机器学习算法
如何用Python实现机器学习算法?
谢邀!
这个问题估计会答成“茴香豆有几种写法” 这种类型的答案。因为用python实现linear regression实在是太多方法了,我简单举几个例子。
线性回归嘛,是个很简单的回归问题。目的是希望构建的模型能够更好的拟合样本数据,不管是一元线性回归还是多元线性回归,x和y的关系都假设是线性的。就是下面这样的:
一般线性回归的公式是y=wx+b。 x是变量,多元的话就是x1,x2....xn这样,当然w也会对应的有多个。模型使用时,也是根据观测的x值来预测y值的。
那么,其实模型要计算的就是w和b了对吧,如何求得w和b使得这个直线更好的拟合数据呢。一般我们用最小二乘法。
最小二乘法的原理和最优化方法就不细讲了,百度上随处可见,主要是介绍下各种实现方法。
1. 只用Python和科学计算库numpy,不使用机器学习框架def Linear_regression():# get train data
data =np.loadtxt('data.csv',delimiter=',')#define hyperparamters
#learning_rate is used for update gradient
#defint the number that will iteration
# define y =mx+b
learning_rate = 0.001
initial_b =0.0
initial_m = 0.0
num_iter = 1000
#train model
#optimizing b and m
[b ,m] = optimizer(data,initial_b,initial_m,learning_rate,num_iter)
其中最关键的部分是optimizer,也就是最优化参数的过程,
def optimizer(data,starting_b,starting_m,learning_rate,num_iter):
b = starting_bm = starting_m#gradient descent
for i in range(num_iter):
#update b and m with the new more accurate b and m by performing# thie gradient step
b,m =compute_gradient(b,m,data,learning_rate)
if i%100==0:print 'iter { 0} :error={ 1} '.format(i,compute_error(b,m,data))
return [b,m]
优化方法可以选用梯度下降来实现,梯度下降算法如下:
def compute_gradient(b_current,m_current,data ,learning_rate):
b_gradient = 0
m_gradient = 0
N = float(len(data))
x = data[:,0]
y = data[:,1]
b_gradient = -(2/N)*(y-m_current*x-b_current)
b_gradient = np.sum(b_gradient,axis=0)
m_gradient = -(2/N)*x*(y-m_current*x-b_current)
m_gradient = np.sum(m_gradient,axis=0)
#update our b and m values using out partial derivations
new_b = b_current - (learning_rate * b_gradient)
new_m = m_current - (learning_rate * m_gradient)
return [new_b,new_m]
每次迭代一个样本的时候都会计算当前参数的预测值和目标值的梯度,以此来决定参数优化的方向。
2. 利用scikit-learn等机器学习库完全用python写一个linear regression的话其实就是复现一下算法的各个流程,如果不是学生可能很少会这么做,因为比较费时费力。更快捷的方式是使用各种算法库,基本都封装了这种简单的统计学习方法。比如在scikit-learn中,可以直接通过调用API完成模型的构建和训练
df = pd.read_csv(StringIO(csv_data))
# 建立线性回归模型
regr = linear_model.LinearRegression()
# 拟合
regr.fit(df['x'], df['y'])
linear_model就是scikit-learn中封装好的一系列线性模型库,线性回归的话调用其中的LinearRegression()就可以了。
3.利用TensorFlow是的,tf也可以。Tensorflow虽然被人民所熟知是因为它广泛的应用在深度学习领域,但是它其实也是个机器学习库,封装了各种统计学习的方法。和构建其他deep learning模型类似。Tensorflow构建线性回归模型更简单, = =||。
# 生成1维W矩阵,取值是[-1, 1]之间的随机数
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0), name='W')
# 生成1维b矩阵,初始值是0
b = tf.Variable(tf.zeros([1]), name='b')
# 以预估值y和实际值y_data之间的均方误差作为损失
loss = tf.reduce_mean(tf.square(y - y_data), name='loss')
# 采用梯度下降法来优化参数
optimizer = tf.train.GradientDescentOptimizer(0.5)
# 训练的过程就是最小化这个误差值
train = optimizer.minimize(loss, name='train')
sess = tf.Session() #这种定义session的方法也可以,但是不推荐。
init = tf.global_variables_initializer()
sess.run(init)
# 初始化的w和b是多少
print("W=", sess.run(W), "b=", sess.run(b), "loss=", sess.run(loss))
# 执行N次训练
for step in range(1000):
sess.run(train)
# 输出训练好的W和b
print("W=", sess.run(W), "b=", sess.run(b), "loss=", sess.run(loss))
小结除了我提到的这些方法,其他各种三方库实现LinearRegression都不复杂,毕竟这是个入门级的统计学习模型,最重要的是理解它的本质。
* 如果觉得有帮助的话,欢迎关注我,会给大家分享更多深度学习、机器学习方面的实战经验,谢谢!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何用Python实现机器学习算法
本文地址: https://pptw.com/jishu/57499.html
