import numpy as np
np.dot
np.dot是NumPy库中的一个函数,用于计算两个数组的点积(dot product)。点积是一种特殊的矩阵乘法运算,用于计算两个向量的内积或者矩阵的乘法。
np.dot可以接受两个参数,
若两个参数中至少有一个是二维数组,np.dot会根据矩阵乘法的规则进行计算,返回矩阵乘积的结果;
若两个参数都是一维数组,则返回两个向量的内积结果。
如果两个参数其中有个数,那么就代表这个数和一个矩阵相乘
数据抽样
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('../data/world-happiness-report-2017.csv')
train_data = data.sample(frac = 0.8)
test_data = data.drop(train_data.index)
pandas.read_csv,用于读取CSV(逗号分隔值)文件到一个Pandas DataFrame对象中,
DataFrame它是一个二维的表格数据结构,类似于电子表格或SQL中的表,可以存储和操作具有不同数据类型的数据。
train_data = data.sample(frac = 0.8)
data.sample函数是Pandas库中DataFrame对象的一个方法,用于从DataFrame中随机选择一部分数据进行抽样。从data DataFrame中抽样的80%训练数据。
data.drop方法来实现这data 中除train_data以外的剩余数据
特征数据的提取
将数据转换为NumPy数组形式能够更好地利用NumPy库提供的功能和性能,便于进行高效的科学计算和数据处理。
my_list = [1, 2, 3, 4, 5]
my_array = np.array(my_list)
print(my_array)
[1 2 3 4 5]
numpy数组形式:[1 2 3 4 5] 中间没有逗号隔开
x_train = train_data[[input_param_name]].values
x_train = train_data[input_param_name]
print(x_train)
x1_train = train_data[[input_param_name]].values
print(x1_train)
x2_train = train_data[input_param_name].values
print(x2_train)
我思考了一下:
第一种 是 返回一个表
第二种是返回一个只有一列矩阵 二维数组形式
第三种这种方式将返回一个一维的NumPy数组形式的数据。
使用双层方括号[[]]来进行列选择,可以保持x_train的维度为二维数组,即使只选择了单个列。这有助于在处理多个特征时保持一致性,可以很容易地与其他特征进行合并或处理。
用matplotlib.pyplot 画出测试集与训练集分布
# import matplotlib.pyplot as plt
plt.scatter(x_train,y_train,label='Train data')
plt.scatter(x_test,y_test,label='test data')
plt.xlabel(input_param_name)
plt.ylabel(output_param_name)
plt.title('Happy')
plt.legend()
plt.show()
使用plt.scatter()
函数绘制训练数据和测试数据的散点图,label
参数用于标注数据的类别。
其中x_train
和y_train
代表训练数据的输入参数和输出参数,x_test
和y_test
代表测试数据的输入参数和输出参数。
使用plt.xlabel()
和plt.ylabel()
设置x轴和y轴的标签,使用plt.title()
设置图表的标题。
使用plt.legend()
添加图例,用于表示不同数据的标识。使用plt.show()
显示图形。
开始训练
(theta,cost_history) = linear_regression.train(learning_rate,num_iterations)
得到训练之后的theta向量 以及每次迭代变化的损失之列表
plt.plot(range(num_iterations),cost_history)
range(num_iterations)
用于创建一个包含从0到num_iterations-1
的整数序列,作为x轴表示迭代次数,也就是说x轴一共有num_iterations点,每个点对应每次迭代之后产生的损失值
plt.plot()
函数是Matplotlib库用于绘制折线图的函数,将range(num_iterations),cost_history两个列表或数组的点连接起来
进行预测
predictions_num = 100
x_predictions = np.linspace(x_train.min(),x_train.max(),
predictions_num).reshape(predictions_num,1)
使用np.linspace()
函数创建一个从x_train
的最小值到最大值之间的等间隔的数组,这个数组包含了要预测的数据点的x坐标。
使用reshape()
函数将数组转换为形状为(predictions_num, 1)
的二维数组。
数据的预处理部分
features_normalized = np.copy(features).astype(float)
np.copy()
函数是NumPy库中的一个函数,用于创建数组的深拷贝。它接受一个数组作为参数,并返回该数组的副本
astype(float)
将副本数组的元素类型转换为浮点型。
np.mean(features, 0)
被用来计算列向量features
的均值。
np.std(features, 0)被用来计算列向量features
的标准差。
第二个参数0表示对轴0进行计算,也就是对列进行计算,若第二个参数1表示对轴1进行计算,即对行进行计算。
np.ones((num_examples, 1))
创建了一个形状为 (num_examples, 1)
的全为1的列向量。
np.hstack((np.ones((num_examples, 1)), data_processed))
使得预处理数据扩展一列且data_processed从第二列开始
过拟合 在训练集上好 测试集上性能较差