python如何保存3维数据格式 python三维数据处理_原始数据

前几日,抓取某股票交易数据后,将原始数据进行了归一化处理,剩下的列尽然有40多个。如何在2维度空间展现这些数据呢?我想到了降维处理(dimensionallity reduction)。

python如何保存3维数据格式 python三维数据处理_mysql_02

根据百度百科对“降维处理”的定义,降维处理是将高维数据化为低维度数据的操作,包括偏最小二乘、非线性映照和投影寻踪技术等降维处理方法。数据在低维下更容易处理、更容易使用,特别是重要特征更能在数据中明确的显示出来。如果只有两维或者三维的话,更便于可视化展示;同时,还可以去除数据噪声,实现降低算法开销。

一、降维处理

在python中,为实现降维,首先想到了scikit-learn程序包。

scikit-learn针对降维处理,提供专门的函数。

函数说明:

sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)

n_components:

意义:PCA算法中所要保留的主成分个数n,也即保留下来的特征个数n

类型:int 或者 string,缺省时默认为None,所有成分被保留。

赋值为int,比如n_components=1,将把原始数据降到一个维度。

赋值为string,比如n_components='mle',将自动选取特征个数n,使得满足所要求的方差百分比。

copy:

类型:bool,True或者False,缺省时默认为True。

意义:表示是否在运行算法时,将原始训练数据复制一份。若为True,则运行PCA算法后,原始训练数据的值不会有任何改变,因为是在原始数据的副本上进行运算;若为False,则运行PCA算法后,原始训练数据的 值会改,因为是在原始数据上进行降维计算。

whiten:

类型:bool,缺省时默认为False

意义:白化,使得每个特征具有相同的方差。

例子:

from sklearn.decomposition import PCA

pca = PCA(n_components=2) //降维到二维

pca.fit(data)//填入数据

newdata=pca.transform(data)//反馈降维后的数据

二、MYSQL数据读取

我使用的是PYTHON3.6,无法直接使用MySQLdb,后来找到个pymysql的包,感觉还不错。 pymysql在函数定义上与MySQLdb类似。

例子:

import pymysql

pymysql.install_as_MySQLdb()

db = pymysql.connect("localhost", "root", "123456", "shares", charset='utf8' )

# 使用cursor()方法获取操作游标

cursor = db.cursor()

# 使用execute方法执行SQL语句

cursor.execute("SELECT open_new, high_new, close_new, low_new, volume_new, price_change_new, p_change_new, ma5_new, ma10_new, ma20_new, v_ma5_new, v_ma10_new, v_ma20_new FROM new_data")

# 使用 fetchone() 方法获取一条数据

#data = cursor.fetchone() //如果只取一行,对数据降维处理的结果有影响。

# 获取所有记录列表

data = cursor.fetchall()

# 关闭数据库连接

db.close()

三、回归展示

因为才接触Tensorflow,只有做个简单的线性回归,测试性把数据展示出来。

在降维数据的散点图上,做了个简单的线性拟合,可以看出效果并不好。

这个是模型的损失函数。

四、实现代码

代码比较乱,毕竟当个学习笔记还可以

import numpy as np
from sklearn.decomposition import PCA
import pymysql
pymysql.install_as_MySQLdb()
import matplotlib.pyplot as plt
# 打开数据库连接
db = pymysql.connect("localhost", "root", "203102", "shares", charset='utf8' )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 使用execute方法执行SQL语句
cursor.execute("SELECT open_new, high_new, close_new, low_new, volume_new, price_change_new, p_change_new, ma5_new, ma10_new, ma20_new, v_ma5_new, v_ma10_new, v_ma20_new FROM new_data")
# 使用 fetchone() 方法获取一条数据
#data = cursor.fetchone()
# 获取所有记录列表
data = cursor.fetchall()
# 关闭数据库连接
db.close()
#print(data)
pca = PCA(n_components=2)
pca.fit(data)
newdata=pca.transform(data)
#print(newdata)
#折线图
#plt.plot(newdata[:,0],newdata[:,1])
#散点图
plt.scatter(newdata[:,0],newdata[:,1])
plt.show()
import tensorflow.compat.v1 as tf
plotdata = { "batchsize":[], "loss":[] }
# 创建模型
# 占位符
#tenserflow 2.0的机关
tf.reset_default_graph()
tf.disable_eager_execution()
#
X = tf.placeholder("float")
Y = tf.placeholder("float")
# 模型参数
W = tf.Variable(tf.random_normal([1]), name="weight")
b = tf.Variable(tf.zeros([1]), name="bias")
# 前向结构
z = tf.multiply(X, W)+ b
#反向优化
cost =tf.reduce_mean(tf.square(Y - z))
learning_rate = 0.01
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) #Gradient descent
# 初始化变量
init = tf.global_variables_initializer()
# 训练参数
training_epochs = 20
display_step = 2
train_X = newdata[:,0]
train_Y = newdata[:,1]
# 启动session
with tf.Session() as sess:
sess.run(init)
# Fit all training data
for epoch in range(training_epochs):
for (x, y) in zip(train_X, train_Y):
sess.run(optimizer, feed_dict={X: x, Y: y})
#显示训练中的详细信息
if epoch % display_step == 0:
loss = sess.run(cost, feed_dict={X: train_X, Y:train_Y})
print ("Epoch:", epoch+1, "cost=", loss,"W=", sess.run(W), "b=", sess.run(b))
if not (loss == "NA" ):
plotdata["batchsize"].append(epoch)
plotdata["loss"].append(loss)
print (" Finished!")
print ("cost=", sess.run(cost, feed_dict={X: train_X, Y: train_Y}), "W=", sess.run(W), "b=", sess.run(b))
#图形显示
plt.plot(train_X, train_Y, 'ro', label='Original data')
plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label='Fitted line')
plt.legend()
plt.show()

五、注意的问题和下步工作

1、 要注意Tensorflow2.0与Tensorflow1.0的区别

1) import tensorflow.compat.v1 as tf

2) tenserflow 2.0的机关,需要加这两行代码,不然占位符又要报错。

tf.reset_default_graph()

tf.disable_eager_execution()

2、继续学习Tensorflow中定义的模型,开始了解keras。

3、写一个 关于pymysql的增删改操作。