文档章节

机器学习学习笔记——单变量线性回归的python实现

eeecheng
 eeecheng
发布于 2015/05/12 15:26
字数 322
阅读 109
收藏 1
# -*- coding:utf-8 -*-
#!/usr/bin/python
import numpy
import operator
import pylab

#从文本文件中读取数值并转换为mx2矩阵,返回矩阵和矩阵的行数
def File2Matrix(filename):
	fr = open(filename)
	arrayOfLines = fr.readlines()
	numberOfLines = len(arrayOfLines)
	returnMat = numpy.zeros((numberOfLines,2))
	
	index = 0
	for line in arrayOfLines:
		line = line.strip()
		listFromLine = line.split('\t')
		returnMat[index,:] = listFromLine[0:2]
		index+=1
	return returnMat
	
#Hypothesis
def Hypothesis(theta0,theta1,x):
	return theta0+theta1*x
	
#Cost Function
#param: 两个thetha初始值
def CostFun(theta0,theta1):
	numberOfLines = matrix.shape[0]
	sum = 0
	for mat in matrix:
		sum = sum + (Hypothesis(theta0,theta1,mat[0])-mat[1])**2
	return 1.0/(2.0*numberOfLines)*sum

#theta0 的偏导数
def Pd_theta0(theta0,theta1):
	numberOfLines = matrix.shape[0]
	sum = 0
	for mat in matrix:
		sum = sum + Hypothesis(theta0,theta1,mat[0])-mat[1]
	return 1.0/(numberOfLines)*sum
	
def Pd_theta1(theta0,theta1):
	numberOfLines = matrix.shape[0]
	sum = 0
	for mat in matrix:
		sum = sum + (Hypothesis(theta0,theta1,mat[0])-mat[1])*mat[0]
	return 1.0/(numberOfLines)*sum
		
#梯度下降
def GradientDesent():
	theta0 = 3
	theta1 = 3
	alpha = 0.001 #梯度步长
	previousCost = CostFun(theta0,theta1)+1
	while 1:
		temp_theta0 = theta0 - alpha*Pd_theta0(theta0,theta1)
		temp_theta1 = theta1 - alpha*Pd_theta1(theta0,theta1)
		
		#取小数点后两位,如果为零,那么就退出循环
		thisCost = CostFun(temp_theta0,temp_theta1)
		if thisCost >= previousCost:
			return theta0,theta1
			break
		else:
			theta0 = temp_theta0
			theta1 = temp_theta1
			previousCost = thisCost
		
	
matrix = File2Matrix("dataSet.txt")
theta0,theta1 = GradientDesent()

X = numpy.linspace(-6, 6, 2,endpoint=True)
Y = numpy.ones((len(X),1))
i = 0
for x in X:
	Y[i] = Hypothesis(theta0,theta1,x)
	i+=1

pylab.plot(X,Y)
pylab.plot(matrix[:,0],matrix[:,1],'o')
pylab.show()

print("theta0:",theta0,"theta1:",theta1)
print("cost=",CostFun(theta0,theta1))


© 著作权归作者所有

上一篇: 概率与似然
下一篇: 概率与似然
eeecheng
粉丝 4
博文 3
码字总数 1385
作品 0
广州
程序员
私信 提问
ApacheCN 人工智能知识树 v1.0

Special Sponsors 贡献者:飞龙 版本:v1.0 最近总是有人问我,把 ApacheCN 这些资料看完一遍要用多长时间,如果你一本书一本书看的话,的确要用很长时间。但我觉得这是非常麻烦的,因为每本...

ApacheCN_飞龙
05/18
0
0
Tensorflow入门——Eager模式像原生Python一样简洁优雅

image source from unsplash.com by Sergio souza 众所周知,Tensorflow入门之所以困难,与其采用的Graph 和 Session 模式有关,这与原生的 Python 代码简单、直观的印象格格不入。同时,由于...

Hongtao洪滔
05/02
0
0
国外程序员整理的机器学习资源大全

 英文原文:awesome-machine-learning   本文汇编了一些机器学习领域的框架、库以及软件(按编程语言排序)。   C++   计算机视觉 CCV —基于C语言/提供缓存/核心的机器视觉库,新颖的...

chworld
2015/08/07
386
0
推荐!国外程序员整理的机器学习资源大全

本列表选编了一些机器学习领域牛B的框架、库以及软件(按编程语言排序)。 C++ 计算机视觉 CCV —基于C语言/提供缓存/核心的机器视觉库,新颖的机器视觉库 OpenCV—它提供C++, C, Python, J...

oschina
2014/07/22
41.8K
59
机器学习的最佳学习路线原来只有四步

AI这个词相信大家都非常熟悉,近几年来人工智能圈子格外热闹,光是AlphoGo就让大家对它刮目相看。今天小天就来跟大家唠一唠如何进军人工智能的第一步——机器学习。 在机器学习领域,Python已...

ufv59to8
2018/05/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
27分钟前
5
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
30分钟前
4
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
56分钟前
4
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
8
0
前端技术之:webpack热模块替换(HMR)

第一步:安装HMR中间件: npm install --save-dev webpack-hot-middleware 第二步:webpack配置中引入webpack对象 const webpack = require('webpack’); 第三步:增加devServer配置项: ho......

popgis
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部