初始化page

This commit is contained in:
veypi
2021-01-09 11:18:13 +08:00
parent 07274909e2
commit cb8dd97c4a
20 changed files with 2337 additions and 19 deletions
@@ -32,7 +32,8 @@
使用神经网络进行回归预测
1. 使用共11个理化指标作为模型输入,经过大量调试(不同的网络结构,不同的深度,宽度,激活函数,初始化策略,优化函数)确定出最好的网络结构和策略。说明为什么你选择了该模型结构和策略。(你对比了哪些其他的结构?你觉得为什么该模型的效果比较好?如何防止你的选择基准只是一个巧合?)用图表总结你的搜索结果,列出每个模型(或者经过挑选的有代表性的模型)的RMSE,R2和模型训练时间。
1.
使用共11个理化指标作为模型输入,经过大量调试(不同的网络结构,不同的深度,宽度,激活函数,初始化策略,优化函数)确定出最好的网络结构和策略。说明为什么你选择了该模型结构和策略。(你对比了哪些其他的结构?你觉得为什么该模型的效果比较好?如何防止你的选择基准只是一个巧合?)用图表总结你的搜索结果,列出每个模型(或者经过挑选的有代表性的模型)的RMSE,R2和模型训练时间。
2. 进一步精调模型,提升模型效果并减少过拟合(例如:dropoutearly stoppingbagging,交叉验证,L2/L1正则化等等)。用图表总结你使用的精调方法的带来的效果提升。
@@ -44,5 +45,29 @@
1. 选择目标1,目标2 里面选得的最优秀的模型,对比他们在不同训练数据下的表现并总结,作图。
作业提交有效时间是今天到12月29日(三周后)之前的任意时间。
提交作业请将代码和报告打包,以“学号-姓名-UQ”命名提交至链接 [http://www.xzc.cn/YvcM5sqqVm]
作业提交有效时间是今天到12月29日(三周后)之前的任意时间。 提交作业请将代码和报告打包,以“学号-姓名-UQ”命名提交至链接 [http://www.xzc.cn/YvcM5sqqVm]
```shell
# 运行
cd numerical_analysis/8
python main.py
```
```
随机森林
R2: 0.475379
accuracy: 0.687500
线性回归
R2: 0.297383
accuracy: 0.587500
支持向量机
R2: 0.250542
accuracy: 0.681250
随机梯度下降
R2: -0.124188
accuracy: 0.475000
多层感知器
R2: 0.288015
accuracy: 0.637500
```
+33 -15
View File
@@ -22,33 +22,42 @@ class WinePredict:
self.X_train = sc.fit_transform(self.X_train)
self.X_test = sc.fit_transform(self.X_test)
# 线性回归
def lr(self):
"""
线性回归
"""
lr = LinearRegression()
lr.fit(self.X_train, self.y_train)
return lr.predict(self.X_test)
# 随机森林
def rfc(self):
rfc = RandomForestClassifier(n_estimators=200)
"""
随机森林
"""
rfc = RandomForestClassifier(n_estimators=200, random_state=20)
rfc.fit(self.X_train, self.y_train)
return rfc.predict(self.X_test)
# 随机梯度下降
# 0.2 极其不稳定
def sgd(self):
"""
随机梯度下降
"""
sgd = SGDClassifier(penalty=None)
sgd.fit(self.X_train, self.y_train)
return sgd.predict(self.X_test)
# 支持向量机
# 0.23 -> 0.25
def svc(self):
"""
支持向量机
"""
svc = SVC(C=1.4, gamma=0.8, kernel='rbf')
svc.fit(self.X_train, self.y_train)
return svc.predict(self.X_test)
def mlp(self):
"""
多层感知器
"""
mlp = MLPClassifier([10, 6], learning_rate_init=0.001, activation='relu', solver='adam', alpha=0.0001,
max_iter=30000)
# 神经网络
@@ -57,9 +66,10 @@ class WinePredict:
# 参数调优
def grid_search(self, model, param):
grid_svc = GridSearchCV(model, param_grid=param, scoring='accuracy', cv=10)
grid_svc.fit(self.X_train, self.y_train)
return grid_svc.best_params_
print('search %s', param)
grid = GridSearchCV(model, param_grid=param, scoring='accuracy', cv=10)
grid.fit(self.X_train, self.y_train)
print("%s: %f" % (grid.best_params_, grid.best_score_))
def gs_svc(self):
param = {
@@ -67,17 +77,23 @@ class WinePredict:
'kernel': ['linear', 'rbf'],
'gamma': [0.1, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4]
}
print(self.grid_search(SVC, param))
self.grid_search(SVC(), param)
# {'C': 1.4, 'gamma': 0.8, 'kernel': 'rbf'}
def gs_rfc(self):
self.grid_search(RandomForestClassifier(), {
'n_estimators': [200],
'random_state': [_ for _ in range(0, 200, 10)]
})
def report(self, fc):
r = fc()
if r.dtype == 'float64' or r.dtype == 'float32':
r = r.round()
# print(classification_report(self.y_test, r))
print(fc.__name__)
print(" R2: %f" % r2_score(self.y_test, r))
print(" accuracy: %f" % accuracy_score(self.y_test, r))
print(fc.__doc__.strip())
print(" R2: %f" % r2_score(self.y_test, r))
print(" accuracy: %f" % accuracy_score(self.y_test, r))
def showXY(self):
# fig = plt.figure(figsize=(10, 6))
@@ -91,5 +107,7 @@ class WinePredict:
if __name__ == '__main__':
wp = WinePredict()
wp.report(wp.lr)
wp.gs_rfc()
for i in [wp.rfc, wp.lr, wp.svc, wp.sgd, wp.mlp][:1]:
wp.report(i)
# wp.showXY()