1
0
mirror of https://github.com/newnius/YAO-optimizer.git synced 2025-06-06 06:41:55 +00:00

robust, allow unseen features & labels

This commit is contained in:
Newnius 2020-07-10 15:21:27 +08:00
parent a178107abd
commit b16c14e08d
2 changed files with 45 additions and 31 deletions

View File

@ -1,10 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="0aedafd8-e57e-462a-beda-65af0b91f3df" name="Default Changelist" comment=""> <list default="true" id="0aedafd8-e57e-462a-beda-65af0b91f3df" name="Default Changelist" comment="" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/serve.py" beforeDir="false" afterPath="$PROJECT_DIR$/serve.py" afterDir="false" />
</list>
<ignored path="$PROJECT_DIR$/out/" /> <ignored path="$PROJECT_DIR$/out/" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
@ -27,7 +24,7 @@
<counts> <counts>
<entry key="Dockerfile" value="3" /> <entry key="Dockerfile" value="3" />
<entry key="csv" value="8" /> <entry key="csv" value="8" />
<entry key="gitignore" value="1" /> <entry key="gitignore" value="2" />
<entry key="iml" value="1" /> <entry key="iml" value="1" />
<entry key="md" value="3" /> <entry key="md" value="3" />
<entry key="png" value="7" /> <entry key="png" value="7" />
@ -43,7 +40,7 @@
<entry key="IDEA_MODULE" value="1" /> <entry key="IDEA_MODULE" value="1" />
<entry key="Image" value="7" /> <entry key="Image" value="7" />
<entry key="Markdown" value="3" /> <entry key="Markdown" value="3" />
<entry key="PLAIN_TEXT" value="12" /> <entry key="PLAIN_TEXT" value="13" />
<entry key="Python" value="14" /> <entry key="Python" value="14" />
</counts> </counts>
</usages-collector> </usages-collector>
@ -71,11 +68,11 @@
</component> </component>
<component name="FileEditorManager"> <component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="true"> <file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/serve.py"> <entry file="file://$PROJECT_DIR$/serve.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-121"> <state relative-caret-position="60">
<caret line="79" lean-forward="true" selection-start-line="79" selection-end-line="79" /> <caret line="101" column="34" selection-start-line="101" selection-start-column="34" selection-end-line="101" selection-end-column="34" />
<folding> <folding>
<element signature="e#18#46#0" expanded="true" /> <element signature="e#18#46#0" expanded="true" />
</folding> </folding>
@ -83,6 +80,15 @@
</provider> </provider>
</entry> </entry>
</file> </file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="30">
<caret line="2" selection-start-line="2" selection-end-line="2" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false"> <file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/compare.sh"> <entry file="file://$PROJECT_DIR$/compare.sh">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
@ -206,7 +212,7 @@
<component name="PropertiesComponent"> <component name="PropertiesComponent">
<property name="WebServerToolWindowFactoryState" value="false" /> <property name="WebServerToolWindowFactoryState" value="false" />
<property name="aspect.path.notification.shown" value="true" /> <property name="aspect.path.notification.shown" value="true" />
<property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1594305792246" /> <property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1594314717327" />
<property name="go.gopath.indexing.explicitly.defined" value="true" /> <property name="go.gopath.indexing.explicitly.defined" value="true" />
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" /> <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
<property name="nodejs_npm_path_reset_for_default_project" value="true" /> <property name="nodejs_npm_path_reset_for_default_project" value="true" />
@ -251,12 +257,12 @@
<workItem from="1588319878551" duration="41219000" /> <workItem from="1588319878551" duration="41219000" />
<workItem from="1588426002721" duration="336000" /> <workItem from="1588426002721" duration="336000" />
<workItem from="1588427782140" duration="326000" /> <workItem from="1588427782140" duration="326000" />
<workItem from="1592809729651" duration="32176000" /> <workItem from="1592809729651" duration="32466000" />
</task> </task>
<servers /> <servers />
</component> </component>
<component name="TimeTrackingManager"> <component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="91030000" /> <option name="totallyTimeSpent" value="91320000" />
</component> </component>
<component name="ToolWindowManager"> <component name="ToolWindowManager">
<frame x="0" y="0" width="1280" height="800" extended-state="0" /> <frame x="0" y="0" width="1280" height="800" extended-state="0" />
@ -267,10 +273,10 @@
<window_info id="Capture Tool" order="2" /> <window_info id="Capture Tool" order="2" />
<window_info id="Favorites" order="3" side_tool="true" /> <window_info id="Favorites" order="3" side_tool="true" />
<window_info id="Image Layers" order="4" /> <window_info id="Image Layers" order="4" />
<window_info content_ui="combo" id="Project" order="5" sideWeight="0.49898168" visible="true" weight="0.2657512" /> <window_info active="true" content_ui="combo" id="Project" order="5" sideWeight="0.49898168" visible="true" weight="0.2657512" />
<window_info id="Structure" order="6" sideWeight="0.50101835" side_tool="true" weight="0.24959612" /> <window_info id="Structure" order="6" sideWeight="0.50101835" side_tool="true" weight="0.24959612" />
<window_info anchor="bottom" id="Version Control" order="0" /> <window_info anchor="bottom" id="Version Control" order="0" />
<window_info active="true" anchor="bottom" id="Terminal" order="1" visible="true" weight="0.32739726" /> <window_info anchor="bottom" id="Terminal" order="1" visible="true" weight="0.32739726" />
<window_info anchor="bottom" id="Event Log" order="2" side_tool="true" /> <window_info anchor="bottom" id="Event Log" order="2" side_tool="true" />
<window_info anchor="bottom" id="Database Changes" order="3" show_stripe_button="false" /> <window_info anchor="bottom" id="Database Changes" order="3" show_stripe_button="false" />
<window_info anchor="bottom" id="Docker" order="4" show_stripe_button="false" /> <window_info anchor="bottom" id="Docker" order="4" show_stripe_button="false" />
@ -321,13 +327,6 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="30">
<caret line="2" selection-start-line="2" selection-end-line="2" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/train.py"> <entry file="file://$PROJECT_DIR$/train.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="810"> <state relative-caret-position="810">
@ -438,14 +437,21 @@
</entry> </entry>
<entry file="file://$PROJECT_DIR$/serve.py"> <entry file="file://$PROJECT_DIR$/serve.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-121"> <state relative-caret-position="60">
<caret line="79" lean-forward="true" selection-start-line="79" selection-end-line="79" /> <caret line="101" column="34" selection-start-line="101" selection-start-column="34" selection-end-line="101" selection-end-column="34" />
<folding> <folding>
<element signature="e#18#46#0" expanded="true" /> <element signature="e#18#46#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="30">
<caret line="2" selection-start-line="2" selection-end-line="2" />
</state>
</provider>
</entry>
</component> </component>
<component name="masterDetails"> <component name="masterDetails">
<states> <states>

View File

@ -41,7 +41,7 @@ def train_models(job):
feature_data = traindata.iloc[:, 1:-1] feature_data = traindata.iloc[:, 1:-1]
label_data = traindata.iloc[:, -1] label_data = traindata.iloc[:, -1]
X_train, X_test, y_train, y_test = train_test_split(feature_data, label_data, test_size=0.01) x_train, x_test, y_train, y_test = train_test_split(feature_data, label_data, test_size=0.01)
params = { params = {
'n_estimators': 70, 'n_estimators': 70,
'max_depth': 13, 'max_depth': 13,
@ -51,14 +51,14 @@ def train_models(job):
} }
# print(params) # print(params)
model = RandomForestRegressor(**params) model = RandomForestRegressor(**params)
model.fit(X_train, y_train) model.fit(x_train, y_train)
# save the model to disk # save the model to disk
modelname = './data/' + job + '_' + label + '.sav' modelname = './data/' + job + '_' + label + '.sav'
pickle.dump(model, open(modelname, 'wb')) pickle.dump(model, open(modelname, 'wb'))
# 对测试集进行预测 # 对测试集进行预测
y_pred = model.predict(X_test) y_pred = model.predict(x_test)
# 计算准确率 # 计算准确率
MSE = mean_squared_error(y_test, y_pred) MSE = mean_squared_error(y_test, y_pred)
RMSE = np.sqrt(MSE) RMSE = np.sqrt(MSE)
@ -76,7 +76,10 @@ def predict(job, features):
values = [job] values = [job]
for feature in models[job]['features']: for feature in models[job]['features']:
values.append(features[feature]) if feature in features:
values.append(features[feature])
else:
values.append(0)
testfile = './data/' + job + '.' + str(random.randint(1000, 9999)) + '.csv' testfile = './data/' + job + '.' + str(random.randint(1000, 9999)) + '.csv'
t = ['job'] t = ['job']
@ -131,8 +134,6 @@ class MyHandler(BaseHTTPRequestHandler):
try: try:
job = query.get('job')[0] job = query.get('job')[0]
features = json.loads(query.get('features')[0]) features = json.loads(query.get('features')[0])
msg = {'code': 0, 'error': ""}
pred, success = predict(job, features) pred, success = predict(job, features)
if not success: if not success:
@ -170,8 +171,15 @@ class MyHandler(BaseHTTPRequestHandler):
for label in models[job]['labels']: for label in models[job]['labels']:
values = [job] values = [job]
for feature in models[job]['features']: for feature in models[job]['features']:
values.append(features[feature]) if feature in features:
values.append(labels[label]) values.append(features[feature])
else:
values.append(0)
if label in labels:
values.append(labels[label])
else:
values.append(0)
if flag: if flag:
t = ['job'] t = ['job']
t.extend(models[job]['features']) t.extend(models[job]['features'])