Tensorflow初学者日记2 线性回归 matplotlib.pyplot 和 panda的基本用法

一、线性回归

1、上手一个例子

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

x_data = np.linspace(-0.5,0.5,200)[:,np.newaxis]    #使用numpy的linspace随机生成(-0.5,0.5)均匀分布的一维的200个点,而后面的[]里的前面:表示数据,np.newaxis表示生成一个新的维度,作用使增加它的维度,变成200行一列的数据
noise = np.random.normal(0,0.02,x_data.shape)    	#生成干扰项,随机值,形状与x_data的形状一样
y_data = np.square(x_data) + noise

x = tf.placeholder(tf.float32,[None,1])			    #定义两个placeholder,形状为行不确定,列为一列
y = tf.placeholder(tf.float32,[None,1])

#构建一个神经网络的中间层
Weights_L1 = tf.Variable(tf.random_normal([1,10]))  #定义权值,随机赋值,形状是一行十列,一个输入值,10个中间层节点
biases_L1 = tf.Variable(tf.zeros([1,10]))           #定义偏置值,初始为0,有十个输出所以有10个偏置值
Wx_plus_b_L1 = tf.matmul(x,Weights_L1) + biases_L1  #计算信号的总和
L1 = tf.nn.tanh(Wx_plus_b_L1)						#中间层的输出,用双曲正弦函数作为激励函数,作用于信号的总和

#构建输出层
Weights_L2 = tf.Variable(tf.random_normal([10,1]))
biases_L2 = tf.Variable(tf.zeros([1,1]))			#只有一个输出,所以只有一个偏置值
Wx_plus_b_L2 = tf.matmul(L1,Weights_L2) + biases_L2
prediction = tf.nn.tanh(Wx_plus_b_L2)				#预测值

#定义代价函数和训练的方法
loss = tf.reduce_mean(tf.square(y - prediction))	#二次代价函数
train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)		#梯度下降法

定义绘画
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for _ in range(2000):
        sess.run(train_step,feed_dict = {x:x_data,y:y_data})			#训练,run train_step,传入x_data和y_data
    prediction_value = sess.run(prediction,feed_dict = {x:x_data})      #训练好之后,看一下结果,获得预测值
    plt.figure()									#打印样本点
    plt.scatter(x_data,y_data)						#把x_data和y_data传进来
    plt.plot(x_data,prediction_value,'r*',lw = 5)
    plt.show()

2、补充matplotlib.pyplot的基本用法

Matplotlib 是一个 Python 的 2D绘图库,通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。

plt.figure(figsize=(w, h)) 							#创建对象,并指定宽度w高度h
plt.plot([1,2,3,4], [1,4,9,16], 'ro')  				#指定xy坐标,显示样式
plt.axis([0, 6, 0, 20])  							#指定横纵轴 [xmin, xmax, ymin, ymax]
plt.xlabel('Smarts'),plt.ylabel('Probability') 	#设置 x 轴和 y 轴的文字
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')		#设置文字注释
plt.axis('off')										#不显示坐标轴
plt.show()											#显示图像
fig.saveimg(imgname)								#保存图像
import matplotlib.pyplot as plt
plt.plot([1, 17, 8, 9])				#plot函数把数组索引当成了横坐标,默认会把所有的点用直线连接起来
plt.ylabel("some numbers")
plt.show()
import matplotlib.pyplot as plt
plt.plot([2, 3, 4, 5],[1, 17, 8, 9])  #第一个参数指定了横轴的坐标,第二个参数指定纵轴。坐标范围默认由数组中的最小值和最大值决定
plt.show()
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1,4,9, 16], 'ro')   #离散的点连起来,在plot函数中设置了第三个参数,也就是格式字符串,这几乎是完全照搬MATLAB的,'ro'中r指红色,o只圆圈形状,要绘制跟先前一样的折线图,参数是'-'。
plt.axis([0, 6, 0, 20])						#横轴与纵轴已经变成指定的范围
plt.show()
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0., 5., 0.2)
plt.plot(t,t, 'r--', t, t**2, 'bs', t, t**3, 'g^')  	#将多组数据绘制到一幅图中
plt.show()
plt.plot(x,y,'b*',label='aaa') 					# 'b*'表示蓝色*状线,label是指定义图例
plt.plot(x*2,y,'r--',label='bbb') 				# 'r--'表示红色虚线,
plt.xlabel('this is x') 						# 设置横轴标签
plt.ylabel('this is y') 						# 设置纵轴标签
plt.title('this is title')						# 设置标题
plt.legend() 									# 显示上面定义的图例
plt.show() 										# 展示图像
plt.subplot(2,1,1) 								# 子图,(2,1,1)代表,创建2*1的画布,并且定位于画布1,等效于plt.subplot(211),即去掉逗号

a = plt.subplots() 								# 返回两个对象 figure ax
figure,ax = plt.subplots()
ax.plot([1,2,3,4,5])
plt.show() 

# subplots可以传入参数,几行几列
figure,ax = plt.subplots(2,2)					# figure 显示画布,分成2*2的
ax[0][0].plot(x,y)
ax[0][1].plot(x*2,y*2) 							# 可以分别绘图
matplotlib.pylot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, hold=None, data=None, **kwargs)
#

3、补充关于panda的语法

Pandas 是基于 NumPy 的一种数据处理工具,该工具为了解决数据分析任务而创建。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的函数和方法.。

Pandas 的数据结构:Pandas 主要有 Series(一维数组),DataFrame(二维数组),Panel(三维数组),Panel4D(四维数组),PanelND(更多维数组)等数据结构。

Pandas 中,Series 可以被看作由 1 列数据组成的数据集。

import pandas as pd 
arr = [0,1,2,3,4]
s1 = pd.Series(arr)
s1
运行:
0    0
1    1
2    2
3    3
4    4

n = np.random.randn(5) 
index = ['a','b','c','d','e']
s2 = pd.Series(n,index)
s2
运行:
a    1.454342
b   -0.262966
c    1.923254
d    0.761142
e   -0.086887

d = {'a':1 ,'b':2,'c':3,'d':4,'e':5} 
s3 = pd.Series(d) 
s3

运行:
a    1
b    2
c    3
d    4
e    5
import pandas as pd 
s1.index = ['A','B','C','D','E']
s4 = s3.append(s1)
s4 = s4.drop('e')  								# 删除索引为 e 的值
s4['A'] = 6  									# 修改索引为 A 的值 = 6
s4[:3]											#对s4的前 3 个数据访问
s4.add(s3) 										#Series 的加法运算是按照索引计算,如果索引不同则填充为 NaN

与 Sereis 不同,DataFrame 可以存在多列数据

import pandas as pd 
data = {'animal': ['cat', 'cat', 'snake', 'dog', 'dog', 'cat', 'snake', 'cat', 'dog', 'dog'],
        'age': [2.5, 3, 0.5, np.nan, 5, 2, 4.5, np.nan, 7, 3],
        'visits': [1, 3, 2, 3, 2, 3, 1, 1, 2, 1],
        'priority': ['yes', 'yes', 'no', 'yes', 'no', 'no', 'no', 'yes', 'no', 'no']}
 
labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
df2 = pd.DataFrame(data, index=labels)

import pandas as pd 
df2.head()  				# 默认为显示 5 行,可根据需要在括号中填入希望预览的行数
df2.tail(3)					#查看 DataFrame 的后 3 行数据
df2.columns					#查看 DataFrame 的列名
发布了70 篇原创文章 · 获赞 5 · 访问量 3535

猜你喜欢

转载自blog.csdn.net/qq_42647903/article/details/99581276