机器学习篇(七)
- 2019 年 10 月 6 日
- 筆記
非监督学习的特点:只有特征值没有目标值。
当没有目标值时,只能把相似的特征归为一个类别。
这种分析方法叫做聚类。
聚类的过程:
如果知道可以划分为多少个类别:
这里以划分x个类别为例:
1、随即在数据中抽取x个样本,当做x个类别的中心点
2、计算其他点分别到这三个点的距离(欧氏距离),距离那个中心点近就划分为那个类别
3、计算每个类别的平均值,这个这个值于中心点相同,结束聚类。
如果不相同,以计算出的平均值为中心点,再次重复2,3步。
如果不知道需要划分为几类,就需要当做超参数处理。
模块:
sklearn.cluster.KMeans()
参数n_clusters:聚类中心的数量(需要分多少类)
参数init:初始化方法,默认为k-means++
性能评估标准:轮廓系数
深度学习之Tensorflow
深度学习和机器学习的区别:简单来说就是算法的区别和应用领域的区别。
深度学习常用于图像理解,语音识别,自然语言处理,无人驾驶等。
安装Tensorflow,分为cup版和gup版。
安装步骤查看:https://tensorflow.google.cn/install/pip?lang=python3&hl=zh-CN
因版本不同,会有部分差异。
测试是否安装成功:
import tensorflow as tf hello = tf.constant('Hello, TensorFlow!') sess = tf.Session() print(sess.run(hello)) # 输出:Hello, TensorFlow!代表安装成功。
在Tensorflow中的名词:
将数据称之为tensor:张量
operstion(op):运算的操作节点,(所有的操作都是一个op),例如上面的hello就是一个op。
图(graph):整个程序的结构
会话:运算程序的图
Tensorflow是计算密集型的框架而Django,Flask,Scrapy是IO密集型框架。
图:
调用:
1、tf.get_default_graph()
2、op、sess、tensor的graph属性。
图的作用相当于给程序分配一个内存。
实例:
import tensorflow as tf a = tf.constant("Hello, TensorFlow!") b = tf.constant("Hello, Python") # 查看默认的图 graph = tf.get_default_graph() print("graph:",graph) with tf.Session() as sess: print(a.graph) print(b.graph) print(sess.graph) ''' 输出: <tensorflow.python.framework.ops.Graph object at 0x00000273EFC99908> <tensorflow.python.framework.ops.Graph object at 0x00000273EFC99908> <tensorflow.python.framework.ops.Graph object at 0x00000273EFC99908> '''
上面是默认的图,同时自己也可以创建:
也就是再创建一个图存放我们的程序,让两段程序不干扰。
# 创建一个图
import tensorflow as tf g = tf.Graph() print(g) # 使用该图 with g.as_default(): s = tf.constant(1.0) print(s.graph) ''' 会输出: <tensorflow.python.framework.ops.Graph object at 0x000001A758ED5518> <tensorflow.python.framework.ops.Graph object at 0x000001A758ED5518> '''
又分配了一个新的内存运行该部分程序。互不干扰。
op:
op和tensor组成一张图。
op:只要使用了tensorflow里定义的函数定义的都是op
tensor(张量):代指数据
op中装tensor。
那些是op:
简单来说就是一些运算,例如标量运算,向量运算,矩阵运算等等。
会话:
会话的作用:
1、运行图的结构
2、分配资源计算
3、掌握资源
开启一个会话:tf.Session()
tf.Session()运行的是默认的图。
参数graph:可以指定运行的图。
tf.Session(graph=g)运行g图。
sess = tf.Session()
sess.run()相当于启动整个图。
sess.close()在计算结束需要释放内存。用with就可以不用写了。
会话中的run方法:
常用参数:
fetches:运行op或者计算tensor,可以列表,元组
feed_dict:用于实时提供数据,相当于一个占位符,运行的时候可以指定参数。
张量(tensor):和numpy中的数组是一样的东西。是Tensorflow中基本的数据格式。
打印出一个tensor会有三部分:名字,形状,数据类型。
名字是op类型。形状也就是shape。
张量的阶:
在numpy中叫做维度,在Tensorflow中叫做阶。
张量的数据类型:

张量的常用属性:
graph:张量所在的图
op:张量的操作名
name:张量的字符串描述
shape:张量的形状
# 0维:() 1维:(x) 2维:(x,y) 3维:(x,y,z)
改变张量的形状:
在Tensorflow中,张量具有动态形状与静态形状
主要区别:有没有生成一个新的张量
静态形状:
tf.Tensor.get_shape:获取静态形状
tf.Tensor.set_shape:改变Tensor的形状
一旦形状确定不能再被修改:
实例:
# 创建一个张量,可以多行4列的数据
plt = tf.placeholder(tf.float32,[None,4])
print(plt)
# 改变形状
plt.set_shape([3,4])
print(plt)
# 再次改变会报错
plt.set_shape([2,6])
print(plt)
'''
Tensor("Placeholder:0", shape=(?, 4), dtype=float32)
Tensor("Placeholder:0", shape=(3, 4), dtype=float32)
报错
'''
动态形状:
tf.reshape():创建一个新张量。
可以创建一个新的张量可以修改:
实例:
tf_reshape = tf.reshape(plt,[2,6])
print(tf_reshape )
'''
Tensor("Reshape:0", shape=(2, 6), dtype=float32)
'''