这里可以使用多种方法
由numpy.random.multivariate_normal(mean, cov[, size, check_valid, tol]).直接生成。先由np.random.randn()生成一维的正态分布 再转化为2维正态。代码如下所示
import numpy as np from numpy.linalg import cholesky import matplotlib.pyplot as plt import pandas as pd sampleNo 250 mu np.array([1, -1]) mu2 np.array([-1, 1]) Sigma np.array([[1, 0], [0, 1]]) s1 np.random.multivariate_normal(mu, Sigma, sampleNo) s1 np.random.multivariate_normal(mu2, Sigma, sampleNo) # R cholesky(Sigma).T # va, vc np.linalg.eig(Sigma) # R2 (np.diag(va) ** 0.5) vc.T # s1 np.random.randn(sampleNo, 2) R mu # s2 np.random.randn(sampleNo, 2) R mu2
生成数据后 我们使用matplotlib对数据可视化如下
plt.plot(*s1.T, . , label s1 ) plt.plot(*s2.T, . , label s2 ) plt.axis( scaled ) plt.legend() plt.show()
最后 我们为两类数据打上Label 再打乱后存入csv文件。
data1 pd.Dataframe(s1) data1[ label ] 1 data2 pd.Dataframe(s2) data2[ label ] -1 data pd.concat([data1, data2]) data0 data.sample(frac 1) data0.to_csv( data0.csv , header False, index False)数据读取与处理
从csv文件中读取数据 按照8:2的比例划分训练集与测试集 并对数据添加常数1 构造常数项。
def init_data(a 0.8): data np.loadtxt( data0.csv , delimiter , ) index_m round(data.shape[0]*a) traindata data[:index_m] testdata data[index_m:] train_x, train_y data_p(traindata) test_x, test_y data_p(testdata) return train_x, train_y, test_x, test_y def data_p(dataIn): dataMatIn dataIn[:, 0:-1] classLabels dataIn[:, -1] dataMatIn np.insert(dataMatIn, 0, 1, axis 1) #特征数据集 添加1是构造常数项x0 return dataMatIn, classLabels法一 利用最小二乘求解线性分类
代码为
def Leastsquare(train_x, train_y): # 最小二乘法 H train_x H0 np.array(H) # H1为H的转置矩阵 H1 np.array(H0).T H2 H1 H0 # 求逆矩阵 H3 np.linalg.inv(H2) # 最终结果计算 W H3 H1 train_y # W grad_descent(train_x, train_y) return W法二 利用线性分类 梯度下降
代码
def grad_descent_mse(dataMatIn, classLabels, maxCycle 500): dataMatrix np.mat(dataMatIn) # (m,n) labelMat np.mat(classLabels).transpose() m, n np.shape(dataMatrix) weights np.ones((n, 1)) # 初始化回归系数 n, 1) alpha 0.001 # 步长 # 最大循环次数默认为500 for i in range(maxCycle): y_hat dataMatrix * weights weights weights - alpha * dataMatrix.transpose()*(y_hat - labelMat).reshape(-1,1) return weights法三 利用逻辑回归 梯度下降 随机梯度下降
使用随机梯度下降与动态调整步长的随机梯度下降。
sigmoid函数 def sigmoid(inX): return 1.0 / (1 np.exp(-inX))



