pytorch实战
课时7 神经网络
-
MSE的缺点:偏导值在输出概率值接近0或者接近1的时候非常小,这可能会造成模型刚开始训练时,偏导值几乎消失,模型速度非常慢。
-
交叉熵损失函数:平方损失则过于严格,需要使用更合适衡量两个概率分布差异的测量函数。
使用逻辑函数得到概率,并结合交叉熵当损失函数时,在模型效果差的时候学习速度比较快,在模型效果好的时候学习速度变慢。
-
torch.randint(0,2,(10,))
报错:torch.randint(0,2,(10))必须要有逗号
-
x.view()相当于reshape。x.view((-1, 4))当第一个参数为-1时,自动调整为n行4列的张量
-
写模型时需要注意:
- super(LinearNet,self).init()
- forward(self, X):
-
查看模型参数:net.state_dict()
机器学习算法(一): 基于逻辑回归的分类预测
逻辑回归使用交叉熵作为损失函数,我理解的步骤为:
- 初始化w和b,计算所有点的y值。
- 利用sigmoid函数将y值转化为属于某一类的概率
- 利用交叉熵损失,希望损失最小,不断更新w和b
下面是天池的具体内容:
python
# 可视化决策边界
plt.figure()
plt.scatter(x_fearures[:,0],x_fearures[:,1], c=y_label, s=50, cmap='viridis') # 绘制三点图
plt.title('Dataset')
# x割裂成200份,y为100,生成网格矩阵,存储网格矩阵的点,20000个点。画图的时候,不需要一定按照x和y的坐标,使用网格坐标也可
nx, ny = 200, 100
x_min, x_max = plt.xlim()
y_min, y_max = plt.ylim() # 边界的大小
x_grid, y_grid = np.meshgrid(np.linspace(x_min, x_max, nx),np.linspace(y_min, y_max, ny)) #x_grid, y_grid的大小都是100*200,计数是从左下到右上
# 根据网格矩阵,也就是有20000个点,计算每个点分别为1类和2类的概率,z_proba的结果
''' array([[0.98401648, 0.01598352],
[0.98362875, 0.01637125],
[0.98323179, 0.01676821],
...,
[0.01094403, 0.98905597],
[0.01068344, 0.98931656],
[0.01042899, 0.98957101]]) '''
z_proba = lr_clf.predict_proba(np.c_[x_grid.ravel(), y_grid.ravel()]) # ravel()将二维合成一维
z_proba = z_proba[:, 1].reshape(x_grid.shape) # 此时z_proba是对应的类别1的预测概率
plt.contour(x_grid, y_grid, z_proba, [0.5], linewidths=2., colors='blue') # 绘制等高线的函数,例如画一座山。XY的坐标,和山的高度
plt.show()
下面是分析iris数据集的一般步骤:
-
数据集的读取,转化为pandas元素
pythoniris_target = data.target #得到数据对应的标签 iris_features = pd.DataFrame(data=data.data, columns=data.feature_names) #利用Pandas转化为DataFrame格式
-
查看数据集的基本信息:
python# 这些函数是pandas的,所以数据格式为Series和DataFrame ## 利用.info()查看数据的整体信息 iris_features.info() ## 进行简单的数据查看,我们可以利用 .head() 头部.tail()尾部 iris_features.head() iris_features.tail() ## 其对应的类别标签为,其中0,1,2分别代表'setosa', 'versicolor', 'virginica'三种不同花的类别。 iris_target ## 利用value_counts函数查看每个类别数量 pd.Series(iris_target).value_counts() ## 对于特征进行一些统计描述 iris_features.describe()
-
可视化描述:散点和箱线图
python## 特征与标签组合的散点可视化 sns.pairplot(data=iris_all,diag_kind='hist', hue= 'target') plt.show() ## 箱线图 for col in iris_features.columns: sns.boxplot(x='target', y=col, saturation=0.5,palette='pastel', data=iris_all) plt.title(col) plt.show()
-
利用模型进行训练:划分数据集,定义模型,模型训练,打印参数
python## 划分数据集 from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(iris_features_part, iris_target_part, test_size = 0.2, random_state = 2020) ## 模型训练 from sklearn.linear_model import LogisticRegression clf = LogisticRegression(random_state=0, solver='lbfgs') clf.fit(x_train, y_train) clf.coef_ clf.intercept_
-
利用模型进行测试,可视化测试结果:预测结果和概率,计算混淆矩阵,利用矩阵和热力图可视化
python## 测试结果是一个array,类别和概率分别如下 test_predict = clf.predict(x_test) test_predict_proba = clf.predict_proba(x_test) ## 正确率计算 from sklearn import metrics print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_test,test_predict)) ## 查看混淆矩阵 confusion_matrix_result = metrics.confusion_matrix(test_predict,y_test) # 利用热力图对于结果进行可视化 plt.figure(figsize=(8, 6)) sns.heatmap(confusion_matrix_result, annot=True, cmap='Blues') plt.xlabel('Predicted labels') plt.ylabel('True labels') plt.show()