要求:
运用逻辑回归的方法,根据性别、年龄、学历、婚姻状况、从事的行业等特征,预测居民的个人收入是否大于5万美元。
代码介绍:
1.加载库函数,设置路径
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
#添加文件路径
X_train_fpath = 'X_train'
Y_train_fpath = 'Y_train'
X_test_fpath = 'X_test'
output_fpath = 'output_{}.csv' #用于测试集的预测输出
2.加载数据
#加载数据
with open(X_train_fpath) as f:
next(f)
X_train = np.array([line.strip('\n').split(',')[1:] for line in f], dtype = float)
with open(Y_train_fpath) as f:
next(f)
Y_train = np.array([line.strip('\n').split(',')[1] for line in f], dtype = float)
with open(X_test_fpath) as f:
next(f)
X_test = np.array([line.strip('\n').split(',')[1:] for line in f], dtype = float)
函数介绍:
该函数功能将数据去掉第一行,去掉第一列,然后按照’,'进行数据分割,并将数据类型变成float。
函数应用举例:
NPARRAY.txt文件如下:
1,2,3
4,5,6
7,8,9
NPARRAY.py文件如下:
import numpy as np
NPARRAY_FPATH='NPARRAY.TXT'
with open(NPARRAY_FPATH) as f:
a=np.array([line.strip('\n').split(',')[1:] for line in f], dtype = float)
print(a)
结果如下:
[[2. 3.]
[5. 6.]
[8. 9.]]
加上next(f)后结果如下:
[[5. 6.]
[8. 9.]]
3.进行数据标准化
#数据标准化(Z标准化)
def _normalize(X, train = True, specified_column = None, X_mean = None, X_std = None):
# 参数:
# X: 需要标准化的数据
# train: 处理training data时为'True',处理testing data时为‘False'.
# specific_column: 数据中需要标准化的列(feature),所有列都需要标准化时为None
# X_mean:数据的均值
# X_std: 数据的标准差
# 结果:
# X: 标准化后的数据
# X_mean:数据的均值
# X_std: 数据的标准差
if specified_column == None:
specified_column = np.arange(X.shape[1])
if train:
X_mean = np.mean(X[:, specified_column] ,0).reshape(1, -1)
X_std = np.std(X[:, specified_column], 0).reshape(1, -1)
X[:,specified_column] = (X[:, specified_column] - X_mean) / (X_std + 1e-8)
return X, X_mean, X_std
X_train, X_mean, X_std = _normalize(X_train, train = True)
X_test, _, _= _normalize(X_test, train = False, specified_column = None, X_mean = X_mean, X_std = X_std)
函数介绍:
- Z标准化:
图片来源于:数据规范化(归一化)、及Z-score标准化 - shape函数
函数功能:读取矩阵长度
函数举例: - reshape函数:
函数功能:
1.当原始数组A[4,6]为二维数组,代表4行6列。
A.reshape(-1,8):表示将数组转换成8列的数组,具体多少行我们不知道,所以参数设为-1。用我们的数学可以计算出是3行8列
2当原始数组A[4,6]为二维数组,代表4行6列。
A.reshape(3,-1):表示将数组转换成3行的数组,具体多少列我们不知道,所以参数设为-1。用我们的数学可以计算出是3行8列
reshape函数不会改变原数组
函数举例:
- arange函数
函数功能:返回一个等差数组
函数举例:如因为X.shape[1]=510,所以specified_column是一个[0,1,…509]的数组 - mean函数
numpy.mean(a, axis, dtype, out,keepdims )
mean()函数功能:求取均值
经常操作的参数为axis,以m * n矩阵举例:
axis 不设置值,对 mn 个数求均值,返回一个实数
axis = 0:压缩行,对各列求均值,返回 1 n 矩阵
axis =1 :压缩列,对各行求均值,返回 m *1 矩阵 - std函数
numpy.std(a, axis=None, dtype=None, out=None, ddof=0, keepdims=)
这个函数是用来求标准差的。
axis=0时,表示求每一列标准差,axis=1时,表示求每一行标准差,当axis=None时,表示求全局标准差。
其次numpy计算的为总体标准偏差,即当ddof=0时,计算有偏样本标准差;一般在拥有所有数据的情况下,计算所有数据的标准差时使用,即最终除以n。
当ddo = 1时,表示计算无偏样本标准差