重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
函数是组织好,可重复使用的,用来实现相关功能的代码段
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名申请、雅安服务器托管、营销软件、网站建设、友谊网站维护、网站推广。
函数提高了代码的重复利用率和应用的模块性。
除Python自带的函数之外,也可以自己创建函数,叫做自定义函数
语法:
函数代码块以 def 开头
参数为 输入值 ,放于函数名后口号里面,
函数内容以冒号:开始,函数体缩进, return 返回 输出值
函数调用使用关键字参数来确定传入的参数值,此时,如果多个函数则不需要按照指定顺序。
在定义函数时,指定参数默认值。调用时如果不传入参数,则使用默认值
不定长部分如果没有指定参数,传入是一个空元组
加了 两个星号 ** 的参数会以字典的形式导入
/ 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。
3.8版本之后的才能使用
不使用 def 定义函数,没有函数名
lamdba主体时一个表达式,而不是代码块,函数体比def简单很多
定义在函数内部的为局部变量,仅能在函数内部使用
定义在函数外部的为全局变量,可在全局使用
模块是将包含所有定义的函数和变量的文件,一般将同类功能的函数组和在一起称为模块。
模块需要导入后,在调用相应函数进行使用
模块导入的方法:
从模块中导入一个指定的部分
把一个模块的所有内容全都导入
基本形式
线性模型(linear model)就是试图通过属性的线性组合来进行预测的函数,基本形式如下:
f(x)=wTx+b
许多非线性模型可在线性模型的基础上通过引入层结构或者高维映射(比如核方法)来解决。线性模型有很好的解释性。
线性回归
线性回归要求均方误差最小:
(w∗,b∗)=argmin∑i=1m(f(xi)−yi)2
均方误差有很好的几何意义,它对应了常用的欧式距离(Euclidean distance)。基于均方误差最小化来进行模型求解称为最小二乘法(least square method),线性回归中,最小二乘发就是试图找到一条直线,使得所有样本到直线的欧式距离之和最小。
我们把上式写成矩阵的形式:
w∗=argmin(y−Xw)T(y−Xw)
这里我们把b融合到w中,X中最后再加一列1。为了求最小值,我们对w求导并令其为0:
2XT(Xw−y)=0
当XTX为满秩矩阵(full-rank matrix)时是可逆的。此时:
w=(XTX)−1XTy
令xi=(xi,1),可以得到线性回归模型:
f(xi)=xTi(XTX)−1XTy
python常见的内置函数有:
1. abs()函数返回数字的绝对值。
2. all() 函数用于判断给定的参数中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。元素除了是 0、空、None、False 外都算 True;空元组、空列表返回值为True。
3. any() 函数用于判断给定的参数是否全部为False,是则返回False,如果有一个为True,则返回True。 元素除了是 0、空、False外都算 TRUE。
4. bin()函数返回一个整数int或者长整数long int的二进制表示。
5. bool() 函数用于将给定参数转换为布尔类型,如果参数不为空或不为0,返回True;参数为0或没有参数,返回False。
6. bytearray()方法返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 = x 256(即0-255)。即bytearray()是可修改的二进制字节格式。
7. callable()函数用于检查一个对象是否可调用的。对于函数、方法、lambda函式、类以及实现了 __call__ 方法的类实例, 它都返回 True。(可以加括号的都可以调用)
8. chr()函数用一个范围在range(256)内(即0~255)的整数作参数,返回一个对应的ASCII数值。
9. dict()函数用来将元组/列表转换为字典格式。
10. dir()函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。
扩展资料:
如何查看python3.6的内置函数?
1、首先先打开python自带的集成开发环境IDLE;
2、然后我们直接输入"dir(__builtins__)",需要注意的是builtins左右的下划线都是两个;
3、回车之后我们就可以看到python所有的内置函数;
4、接下来我们学习第二种查看python内置函数的方法,我们直接在IDLE中输入"import builtins",然后输入"dir(builtins)";
5、然后回车,同样的这个方法也可以得到所有的python内置的函数;
6、这里我们可以使用python内置函数len()来查看python内置函数的个数,这里我们直接输入"len(dir(builtins))";
7、回车之后我们可以看到系统返回值153,说明我们现在这个版本中有153个内置函数;
8、最后我们介绍一个比较有用的内置函数"help",python内置函数有一百多个,我们当然不能记住所有的函数,这里python提供了一个"help"函数,我们来看一个例子一起来体会一下help函数的用法,这里我们直接输入"help(len)",然后回车,会看到系统给我们对于内置函数"len"的解释,当然对于其他函数可能会有更加详细的解释以及用法提示。
1、print()函数:打印字符串;
2、raw_input()函数:从用户键盘捕获字符;
3、len()函数:计算字符长度;
4、format()函数:实现格式化输出;
5、type()函数:查询对象的类型;
6、int()函数、float()函数、str()函数等:类型的转化函数;
7、id()函数:获取对象的内存地址;
8、help()函数:Python的帮助函数;
9、s.islower()函数:判断字符小写;
10、s.sppace()函数:判断是否为空格;
11、str.replace()函数:替换字符;
12、import()函数:引进库;
13、math.sin()函数:sin()函数;
14、math.pow()函数:计算次方函数;
15、os.getcwd()函数:获取当前工作目录;
16、listdir()函数:显示当前目录下的文件;
17、time.sleep()函数:停止一段时间;
18、random.randint()函数:产生随机数;
19、range()函数:返回一个列表,打印从1到100;
20、file.read()函数:读取文件返回字符串;
21、file.readlines()函数:读取文件返回列表;
22、file.readline()函数:读取一行文件并返回字符串;
23、split()函数:用什么来间隔字符串;
24、isalnum()函数:判断是否为有效数字或字符;
25、isalpha()函数:判断是否全为字符;
26、isdigit()函数:判断是否全为数字;
27、 lower()函数:将数据改成小写;
28、upper()函数:将数据改成大写;
29、startswith(s)函数:判断字符串是否以s开始的;
30、endwith(s)函数:判断字符串是否以s结尾的;
31、file.write()函数:写入函数;
32、file.writeline()函数:写入文件;
33、abs()函数:得到某数的绝对值;
34、file.sort()函数:对书数据排序;
35、tuple()函数:创建一个元组;
36、find()函数:查找 返回的是索引;
37、dict()函数:创建字典;
38、clear()函数:清楚字典中的所有项;
39、copy()函数:复制一个字典,会修改所有的字典;
40、 get()函数:查询字典中的元素。
…………
一:libsvm包下载与使用:
LIBSVM是台湾大学林智仁(Lin Chih-Jen)副教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了源代码,方便改进.
把包解压在C盘之中,如:C:\libsvm-3.18
2.
因为要用libsvm自带的脚本grid.py和easy.py,需要去官网下载绘图工具gnuplot,解压到c盘
3.
进入c:\libsvm\tools目录下,用文本编辑器(记事本,edit都可以)修改grid.py和easy.py两个文件,找到其中关于gnuplot路径的那项,根据实际路径进行修改,并保存
4python与libsvm的连接(参考SVM学习笔记(2)LIBSVM在python下的使用 )
a.打开IDLE(python GUI),输入
import sys
sys.version
如果你的python是32位,将出现如下字符:
‘2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)]’
这个时候LIBSVM的python接口设置将非常简单。在libsvm-3.16文件夹下的windows文件夹中找到动态链接库libsvm.dll,将其添加到系统目录,如`C:\WINDOWS\system32\’,即可在python中使用libsvm
b.如果你是64位的请参考文献,请参考上述连接。
5.执行一个小例子
import os
os.chdir('C:\libsvm-3.18\python')#请根据实际路径修改
from svmutil import *
y, x = svm_read_problem('../heart_scale')#读取自带数据
m = svm_train(y[:200], x[:200], '-c 4')
p_label, p_acc, p_val = svm_predict(y[200:], x[200:], m)
##出现如下结果,应该是正确安装了
optimization finished, #iter = 257
nu = 0.351161
obj = -225.628984, rho = 0.636110
nSV = 91, nBSV = 49
Total nSV = 91
Accuracy = 84.2857% (59/70) (classification)
二几个简单的例子
从下载实验数据集。并且将数据集拷贝到C:\libsvm-3.18\windows下(因为之后我们需要利用该文件夹下的其他文件,这样比较方便,当然之后你用绝对地址也可以了)
建立一个py文件,写下如下代码:
例1:
import os
os.chdir('C:\libsvm-3.18\windows')#设定路径
from svmutil import *
y, x = svm_read_problem('train.1.txt')#读入训练数据
yt, xt = svm_read_problem('test.1.txt')#训练测试数据
m = svm_train(y, x )#训练
svm_predict(yt,xt,m)#测试
执行上述代码,精度为:Accuracy = 66.925% (2677/4000) (classification)
常用接口
svm_train() : train an SVM model#训练
svm_predict() : predict testing data#预测
svm_read_problem() : read the data from a LIBSVM-format file.#读取libsvm格式的数据
svm_load_model() : load a LIBSVM model.
svm_save_model() : save model to a file.
evaluations() : evaluate prediction results.
- Function: svm_train#三种训练写法
There are three ways to call svm_train()
model = svm_train(y, x [, 'training_options'])
model = svm_train(prob [, 'training_options'])
model = svm_train(prob, param)
有关参数的设置(read me 文件夹中有详细说明):
Usage: svm-train [options] training_set_file [model_file]
options:
-s svm_type : set type of SVM (default 0)#选择哪一种svm
0 -- C-SVC (multi-class classification)
1 -- nu-SVC (multi-class classification)
2 -- one-class SVM
3 -- epsilon-SVR (regression)
4 -- nu-SVR (regression)
-t kernel_type : set type of kernel function (default 2)#是否用kernel trick
0 -- linear: u'*v
1 -- polynomial: (gamma*u'*v + coef0)^degree
2 -- radial basis function: exp(-gamma*|u-v|^2)
3 -- sigmoid: tanh(gamma*u'*v + coef0)
4 -- precomputed kernel (kernel values in training_set_file)
-d degree : set degree in kernel function (default 3)
-g gamma : set gamma in kernel function (default 1/num_features)
-r coef0 : set coef0 in kernel function (default 0)
-c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)
-n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)
-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)
-m cachesize : set cache memory size in MB (default 100)
-e epsilon : set tolerance of termination criterion (default 0.001)
-h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)
-b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)
-wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1)
-v n: n-fold cross validation mode
-q : quiet mode (no outputs)
三提高预测的准确率:
通过一定的过程,可以提高预测的准确率(在文献2中有详细介绍):
a.转换数据为libsvm可用形式.(可以通过下载的数据了解格式)
b.进行一个简单的尺度变换
c.利用RBF kernel,利用cross-validation来查找最佳的参数 C 和 r
d.利用最佳参数C 和 r ,来训练整个数据集
e.测试
再看例子1:
1.进入cmd模式下,输入如下代码,将现有数据进行适度变换,生成变换后的数据文件train.1.scale.txt
参数说明:
-l 变换后的下限
-u 变换后的上限
-s 参考上文
2执行以下代码
import os
os.chdir('C:\libsvm-3.18\windows')#设定路径
from svmutil import *
y, x = svm_read_problem('train.1.scale.txt')#读入训练数据
yt, xt = svm_read_problem('test.1.scale.txt')#训练测试数据
m = svm_train(y, x )#训练
svm_predict(yt,xt,m)#测试
精确度为Accuracy = 95.6% (3824/4000) (classification)。
可见我们只是做了简单的尺度变换后,预测的正确率大大提升了。
3通过选择最优参数,再次提高预测的准确率:(需要把tools文件下的grid.py拷贝到'C:\libsvm-3.18\windows'下)
import os
os.chdir('C:\libsvm-3.18\windows')#设定路径
from svmutil import *
from grid import *
rate, param = find_parameters('train.1.scale.txt', '-log2c -3,3,1 -log2g -3,3,1')
y, x = svm_read_problem('train.1.scale.txt')#读入训练数据
yt, xt = svm_read_problem('test.1.scale.txt')#训练测试数据
m = svm_train(y, x ,'-c 2 -g 4')#训练
p_label,p_acc,p_vals=svm_predict(yt,xt,m)#测试
执行上面的程序,find_parmaters函数,可以找到对应训练数据较好的参数。后面的log2c,log2g分别设置C和r的搜索范围。搜索机制是以2为底指数搜索,如 –log2c –3 , 3,1 就是参数C,从2^-3,2^-2,2^-1…搜索到2^3.
搜索到较好参数后,在训练的时候加上参数的设置。
另外,读者可以自己试试数据集2,3.
【常见的内置函数】
1、enumerate(iterable,start=0)
是python的内置函数,是枚举、列举的意思,对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值。
2、zip(*iterables,strict=False)
用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用*号操作符,可以将元组解压为列表。
3、filter(function,iterable)
filter是将一个序列进行过滤,返回迭代器的对象,去除不满足条件的序列。
4、isinstance(object,classinfo)
是用来判断某一个变量或者是对象是不是属于某种类型的一个函数,如果参数object是classinfo的实例,或者object是classinfo类的子类的一个实例,
返回True。如果object不是一个给定类型的的对象, 则返回结果总是False
5、eval(expression[,globals[,locals]])
用来将字符串str当成有效的表达式来求值并返回计算结果,表达式解析参数expression并作为Python表达式进行求值(从技术上说是一个条件列表),采用globals和locals字典作为全局和局部命名空间。
【常用的句式】
1、format字符串格式化
format把字符串当成一个模板,通过传入的参数进行格式化,非常实用且强大。
2、连接字符串
常使用+连接两个字符串。
3、if...else条件语句
Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。其中if...else语句用来执行需要判断的情形。
4、for...in、while循环语句
循环语句就是遍历一个序列,循环去执行某个操作,Python中的循环语句有for和while。
5、import导入其他脚本的功能
有时需要使用另一个python文件中的脚本,这其实很简单,就像使用import关键字导入任何模块一样。