机器学习 入门

File "sklearn/svm/libsvm_sparse.pyx", line 5, in init sklearn.svm.libsvm_sparse (sklearn/svm/libsvm_sparse.c:7615) 
ImportError: cannot import name ConvergenceWarning 

报错处理

sudo pip uninstall scikit-learn 
sudo pip install scikit-learn 
机器学习SVM分类器
  1. 使用sklearn进行分类、预测
    
    python from sklearn import svm
    X = [[0, 0], [1, 1], [1, 0]]#取样 y = [0, 1, 1]# 
    #分类 
    clf = svm.SVC() clf.fit(X, y)
    #训练 
    result = clf.predict([[2, 2]]) 
    print clf print result 

预测

clt = svm.SVR() clt.fit(X, y) result = clt.predict([[2, 2]]) print result

输出及注解 

python """ 输出 SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf', max_iter=-1,probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False) [1] [ 0.70393476] //[1] (将训练数据分类为y=1) SVC参数解释 (1)C: 目标函数的惩罚系数C,用来平衡分类间隔margin和错分样本的,default C = 1.0。C越大,相当于惩罚松弛变量,希望松弛变量接近0,即对误分类的惩罚增大,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但泛化能力弱。C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强。; (2)cache_size: 核函数cache缓存大小,默认为200; (3)class_weight: 类别的权重,字典形式传递。设置第几类的参数C为weightC(C-SVC中的C); (4)coef0:核函数中的常数项,'RBF' and 'Poly'有效; (5)decision_function_shape : ‘ovo’ 一对一, ‘ovr’ 多对多 or None 无, default=None (6)degree:多项式poly函数的维度,默认是3,选择其他核函数时会被忽略; (7)gamma:核函数的系数('Poly', 'RBF' and 'Sigmoid'), 默认是gamma = 1 / n_features; (8)kernel:核函数,默认是rbf,可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’    0 – 线性:u'v    1 – 多项式:(gammau'v + coef0)^degree   2 – RBF函数:exp(-gamma|u-v|^2)    3 –sigmoid:tanh(gammau'*v + coef0) (9)max_iter: 最大迭代次数,default = 1, if max_iter = -1, no limited,无限次; (10)probablity: 可能性估计是否使用(true or false); (11)random_state :用于概率估计的数据重排时的伪随机数生成器的种子。 (12)shrinking:是否进行启发式; (13)tol(default = 1e - 3): svm结束标准的精度; (14)verbose: 允许冗余输出; SVM: Support Vector Machines(支持向量机),可以用来做分类和回归。 SVC是SVM的一种Type,是用来的做分类的,SVR是SVM的另一种Type,是用来的做回归的。 """ ``` 2. 使用numpy

from numpy import * a = matrix([ [1, 2], [3, 4] ]) print a 
# 科学计算 
import numpy as np print np.version.version 
# 获取当前numpy版本 
a = np.array([1, 2, 3, 4]) 
b = np.array([1.0, 2, 3, 4]) 
print a, b # 二维数组 以list 或 元组为元素 
x = np.array( ((1, 2, 3), (4, 5, 6)) ) 
print x y = np.array( [[1, 2, 3], [4, 5, 6]] ) print y 
# 数据类型设定与转换 # 
numpy ndarray数据类型可以通过参数dtype 设定,而且可以使用astype转换类型,在处理文件时候这个会很实用,注意astype 调用会返回一个新的数组,也就是原始数据的一份拷贝。 
num_str = np.array(['1.2', '2', '4.5'], dtype=np.string_) # 从字符串拷贝 
num_str = num_str.astype(float) # 设置新的类型 float64, int (需要array对应为整型) 
print num_str 
# 索引(index)、切片(slicing) 
x = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]]) 
print x 
print x[1, 2] y = x[:, 1] 
print y y[0] = 10 
print y 
print x 
# 以上操作改变了x[0, 1]的值,所以由此获取的数组值改变,则原数组随之改变,为同一内存空间 
# 获取不影响原数组的副本 
arr_copy = x[1:3].copy() 
arr_copy[0] = 24 
# 第0行为24 
arr_copy[:, 1] = 36 
# 第1列为36 
print arr_copy 
# 切片 
sl = range(10) 
print sl t1 = sl[4: 8] t1[0] = 22 
print t1 arr2d = np.arange(1, 10).reshape(3, 3) 
#将一维数组转换为二维数组 
print arr2d 
print arr2d[2] 
print arr2d[0][1] 
print arr2d==1 
# 返回一个对应的二维数组,值为分别判断的结果 
""" 
[[ True False False] [False False False] [False False False]] 
""" 
data = np.array([[ 0.36762706, -1.55668952, 0.84316735, -0.116842], [ 1.34023966, 1.12766186, 1.12507441, -0.68689309], [ 1.27392366, -0.43399617, -0.80444728, 1.60731881], [ 0.23361565, 1.38772715, 0.69129479, -1.19228023], [ 0.51353082, 0.17696698, -0.06753478, 0.80448168], [ 0.21773096, 0.60582802, -0.46446071, 0.83131122], [ 0.50569072, 0.04431685, -0.69358155, -0.9629124 ]]) 
data[data < 0] = 0 
# 将小于0的值全部替换为0 
print data 
""" [[ 0.36762706 0. 0.84316735 0. ] [ 1.34023966 1.12766186 1.12507441 0. ] [ 1.27392366 0. 0. 1.60731881] [ 0.23361565 1.38772715 0.69129479 0. ] [ 0.51353082 0.17696698 0. 0.80448168] [ 0.21773096 0.60582802 0. 0.83131122] [ 0.50569072 0.04431685 0. 0. ]] 
""" 
# 数组文件输入、输出 
# 数组以二进制格式保存到磁盘,np.save、np.load读写函数,默认情况下,数组以未压缩的原始二进制格式存储在.npy文件中 
arr = np.arange(10) np.save('some_array', arr) 
#存储 
tt = np.load('some_array.npy') 
# 读取 
print tt arr = np.arange(1, 10).reshape(3, 3) 
# 
np.savetxt('data1.txt', arr) 
np.savetxt('data1.txt', arr, fmt='%d', delimiter=',') 
# 
ac = np.loadtxt('data1.txt') 
ac = np.loadtxt('data1.txt', dtype=int, delimiter=',')
# 读取要与写入参数一致 
print 'ac', ac 
""" 1. 1.47368421 1.94736842 2.42105263 2.89473684 3.36842105 3.84210526 4.31578947 4.78947368 5.26315789 5.73684211 6.21052632 6.68421053 7.15789474 7.63157895 8.10526316 8.57894737 9.05263158 9.52631579 10. 
""" 
ad = np.loadtxt('data.txt', dtype=float, delimiter=' ') 
print ad 
# 构造矩阵 
ma1 = np.arange(15).reshape(3, 5) 
# 先获取一个0到15的数组,之后变形为3行5列的二维数组 
""" 
[[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]] 
""" 
ma2 = np.linspace(1, 10, 20) 
# 从1 到 10, 随机出20个数 
""" 
[ 1. 1.47368421 1.94736842 2.42105263 2.89473684 3.36842105 3.84210526 4.31578947 4.78947368 5.26315789 5.73684211 6.21052632 6.68421053 7.15789474 7.63157895 8.10526316 8.57894737 9.05263158 9.52631579 10. ] 
""" 
ma3 = np.zeros((3, 4)) 
# 获得一个 3行 4列的 二维数组,元素均为0. 
""" [[ 0. 0. 0. 0.] [ 0. 0. 0. 0.] [ 0. 0. 0. 0.]] """ 
ma4 = np.ones((3, 4)) 
# 获得一个 3行 4列的 二维数组,元素均为1. 
""" [[ 1. 1. 1. 1.] [ 1. 1. 1. 1.] [ 1. 1. 1. 1.]] """ 
ma5 = np.eye(3) 
# 获得一个3行3列的矩阵,n行n列的元素均为1.,其他均为0. 
""" [[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.]] """ 
print ma5 
# 数组属性 
print 'ndim 维数', ma4.ndim 
# 维数 
print 'shape 数组每一维的大小', ma4.shape 
# 数组每一维的大小 
print 'size 元素个数', ma4.size 
# 元素个数 
print 'dtype 元素类型', ma4.dtype 
# 元素类型 
print 'itemsize 每个元素所占的字节数', ma4.itemsize 
# 每个元素所占的字节数 
print ma4.flags 
# 数组信息 
print ma4.data 
# Python buffer object pointing to the start of the array’s data. print ma4.strides 
# Tuple of bytes to step in each dimension when traversing an array. 
print ma4.base 
# Total bytes consumed by the elements of the array. 
print ma4.nbytes 
# Base object if memory is from some other object. 
""" ndim 维数 2 shape 数组每一维的大小 (3, 4) size 元素个数 12 dtype 元素类型 float64 itemsize 每个元素所占的字节数 8 C_CONTIGUOUS : True F_CONTIGUOUS : False OWNDATA : True WRITEABLE : True ALIGNED : True UPDATEIFCOPY : False ? ? ? ? ? ? ? ? ? ? ? ? (32, 8) None 96 """ 
# 合并数组 (相当于连接) 
# vstack(垂直方向),hstack(水平方向) 
aa = np.ones((2, 2)) 
bb = np.eye(2) 
print 'aa =\n', aa 
print 'bb = \n', bb 
print 'v =\n', np.vstack((aa, bb)) 
print 'h =\n', np.hstack((aa, bb)) 
""" aa = [[ 1. 1.] [ 1. 1.]] bb = [[ 1. 0.] [ 0. 1.]] v = [[ 1. 1.] [ 1. 1.] [ 1. 0.] [ 0. 1.]] h = [[ 1. 1. 1. 0.] [ 1. 1. 0. 1.]] """ 
# 矩阵运算 转置 
t = np.array([[1, 0], [2, 3]]) 
print 't =\n', t 
print '转置\n', t.transpose() 
""" t = [[1 0] [2 3]] 转置 [[1 2] [0 3]] """ 
# 特征值特征向量 
from numpy import linalg as nplg 
print '求此矩阵的特征值与特征向量\n', t w, v = nplg.eig(t) 
print w 
# 特征值 
print v 
#特征向量 
""" 求此矩阵的特征值与特征向量 [[1 0] [2 3]] [ 3. 1.] [[ 0. 0.70710678] [ 1. -0.70710678]] """ 
# 数组 
  1. 中文分词
    # 中文分词 
    import jieba 
    seg_list = jieba.cut("北京野生动物园轿车遭黑熊围堵") 
    print "Default Mode:", ' '.join(seg_list) 
  2. 简单绘图
    import matplotlib.pyplot as plt 
    labels = 'frogs', 'hogs', 'dogs', 'logs' sizes = 15, 20, 45, 10 colors = 'yellowgreen', 'gold', 'lightskyblue', 'lightcoral' explode = 0, 0.1, 0, 0 plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=50) 
    plt.axis('equal') 
    plt.show() 

    如果无法运行,使用pip重新安装matplotlib,如果出现无权限的情况,在mac系统下,重启进入恢复模式下,右上角终端,输入csrutil disable,关闭SIP保护。重新启用,则使用csrutil enable即可。

    
    # 绘制坐标图 
    # 终端输入 
    python -m IPython notebook 
    # 进入notebook,此时绘制的图像,会在浏览器中直接显示 %matplotlib inline 
    import numpy as np 
    import matplotlib.pyplot as plt 
    # 命令行风格函数的集合,可以类似Matlab 
    # from pylab import * x = np.arange(-5.0, 5.0, 0.02) # 从-5.0到5.0之间每隔0.02取值 y1 = np.sin(x) # 获取每个值的sin值 plt.figure(1) plt.subplot(211) # 把视图划分为2行1列,在第1个区域画图 plt.plot(x, y1) # 绘制 plt.subplot(212) # 在第二个区域绘制对象 2 行 2 列 绘制区域 2 xlim(-2.5, 2.5) # 设置x轴范围 ylim(-1, 1) # 设置y轴范围 plt.plot(x, y1) ``` ```python # 当然也可以使用pycharm,会弹出一个窗口 import numpy as np import matplotlib.pyplot as plt x = np.arange(-5.0, 5.0, 0.4) # 从-5.0到5.0之间每隔0.02取值 y1 = np.sin(x) # 获取每个值的sin值 plt.figure(1) # 设置有几张图, 默认为一张, plt.subplot(211) # 把视图划分为2行1列,在第1个区域画图 plt.plot(x, y1) # 绘制 plt.subplot(212, axisbg='y') # 在第二个区域绘制对象 2 行 2 列 绘制区域 2,可以设置背景色 plt.axis([-2.5, 2.5, -1, 1]) #x, y设置范围 plt.plot(x, y1, 'r') # 可以设置线的颜色,后面带 -- : 虚线, ^ :三角形,s :正方形 plt.figure(2) # 类似添加图片ID,下一张图开始 plt.plot([4, 5, 6]) plt.show() ``` ```python # 绘制直方图 mu, sigma = 100, 15 x = mu + sigma * np.random.randn(10000) # 从非标准正态分布中获取随机样本 n, bins, patches = plt.hist(x, 50, normed=1, facecolor='g', alpha=0.75) # 数据直方图 plt.xlabel('Smarts') # x 轴标题 plt.ylabel('Probability') # y 轴标题 plt.title('Histogram of IQ') # 顶部大标题 plt.text(60, 0.025, r'$\mu=100,\ \sigma=15$') # 显示在图中的间接,前两个为(x,y)位置 plt.axis([40, 160, 0, 0.03]) # x, y轴区域 plt.grid(True) # 背景分割虚线 plt.annotate('local max', xy=(100, 0.028), xytext=(140, 0.015), arrowprops=dict(facecolor='black', shrink=0.05)) # 文本注释, xy为被注释的位置, xytext为文本的位置 plt.show() ``` ```python # 设置刻度、图例 plt.figure(figsize=(8, 6), dpi=80) # 创建一个8*6point的图像,分辨率为80 plt.subplot(1, 1, 1) # 1行1列1块 X = np.linspace(-np.pi, np.pi, 256, endpoint=True) # 类似arange,开始,结束,元素个数,是否包含终值 C, S = np.cos(X), np.sin(X) plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine") # 绘制,且带图例 plt.plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine") plt.legend(loc='upper left') # 设置图例位置 上 左 plt.axis([-4, 4, -1.2, 1.2]) # 设置x,y轴范围 plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$']) # 设置x轴刻度 plt.yticks([-1, 0, +1]) # 设置y轴刻度 plt.show() ``` ```python # 特殊点注释 ,在上图的基础上 t = 2 * np.pi / 3 plt.plot([t, t], [0, np.cos(t)], color='blue', linewidth=2.5, linestyle='--') plt.scatter([t, ], [np.cos(t), ], 50, color='blue') plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$', xy=(t, np.sin(t)), xycoords='data',xytext=(+10, +30), textcoords='offset points', fontsize=16, arrowprops=dict(arrowstyle='->', connectionstyle="arc3, rad=.2")) plt.plot([t, t], [0, np.sin(t)], color='red', linewidth=2.5, linestyle='--') plt.scatter([t, ], [np.sin(t), ], 50, color='red') plt.annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$', xy=(t, np.cos(t)), xycoords='data', xytext=(-90, -50), textcoords='offset points', fontsize=16, arrowprops=dict(arrowstyle='->', connectionstyle='arc3, rad=.2')) plt.show() ``` ```python # 打印colors中name及对应的色值 for name,hex in mpl.colors.cnames.iteritems(): print name,hex ``` > axex: 设置坐标轴边界和表面的颜色、坐标刻度值大小和网格的显示 backend: 设置目标暑促TkAgg和GTKAgg figure: 控制dpi、边界颜色、图形大小、和子区( subplot)设置 font: 字体集(font family)、字体大小和样式设置 grid: 设置网格颜色和线性 legend: 设置图例和其中的文本的显示 line: 设置线条(颜色、线型、宽度等)和标记 patch: 是填充2D空间的图形对象,如多边形和圆。控制线宽、颜色和抗锯齿设置等。 savefig: 可以对保存的图形进行单独设置。例如,设置渲染的文件的背景为白色。 verbose: 设置matplotlib在执行期间信息输出,如silent、helpful、debug和debug-annoying。 xticks和yticks: 为x,y轴的主刻度和次刻度设置颜色、大小、方向,以及标签大小。 > 线条风格linestyle或ls 描述 线条风格linestyle或ls 描述 '-' 实线 ':' 虚线 '--' 破折线 'None',' ','' 什么都不画 '-.' 点划线 > 线条标记 标记maker 描述 标记 描述 'o' 圆圈 '.' 点 'D' 菱形 's' 正方形 'h' 六边形1 '*' 星号 'H' 六边形2 'd' 小菱形 '_' 水平线 'v' 一角朝下的三角形 '8' 八边形 '<' 一角朝左的三角形 'p' 五边形 '>' 一角朝右的三角形 ',' 像素 '^' 一角朝上的三角形 '+' 加号 '\ ' 竖线 'None','',' ' 无 'x' X 5. pandas ``` ``` ---- #### 机器学习 1. Theano Theano是我们关注的第一个 Python 深度学习库 2. Caffe Caffe 是一个深度学习框架 用 Caffe 实现 Google 的 #DeepDream 3. Nightmare

2022-08-01 07:43:11