Merge pull request 'zavrazhnova_svetlana_lab_2 is ready' (#10) from zavrazhnova_svetlana_lab_2 into main
Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/10
This commit is contained in:
commit
6ad79769f3
92
.idea/workspace.xml
Normal file
92
.idea/workspace.xml
Normal file
@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="0ceb130e-88da-4a20-aad6-17f5ab4226ac" name="Changes" comment="">
|
||||
<change afterPath="$PROJECT_DIR$/zavrazhnova_svetlana_lab_2/result.png" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="FileTemplateManagerImpl">
|
||||
<option name="RECENT_TEMPLATES">
|
||||
<list>
|
||||
<option value="Python Script" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="MarkdownSettingsMigration">
|
||||
<option name="stateVersion" value="1" />
|
||||
</component>
|
||||
<component name="ProjectId" id="2VlZqWiOX68aCf0o2y0AtYJWURS" />
|
||||
<component name="ProjectViewState">
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
</component>
|
||||
<component name="PropertiesComponent"><![CDATA[{
|
||||
"keyToString": {
|
||||
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"last_opened_file_path": "D:/ulstukek/Course4/IIS/IISLabs/IIS_2023_1"
|
||||
}
|
||||
}]]></component>
|
||||
<component name="RecentsManager">
|
||||
<key name="CopyFile.RECENT_KEYS">
|
||||
<recent name="D:\ulstukek\Course4\IIS\IISLabs\IIS_2023_1\zavrazhnova_svetlana_lab_1" />
|
||||
</key>
|
||||
</component>
|
||||
<component name="RunManager">
|
||||
<configuration name="zavrazhnova_svetlana_lab_2" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
|
||||
<module name="IIS_2023_1" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs>
|
||||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/zavrazhnova_svetlana_lab_2" />
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/zavrazhnova_svetlana_lab_2/zavrazhnova_svetlana_lab_2.py" />
|
||||
<option name="PARAMETERS" value="" />
|
||||
<option name="SHOW_COMMAND_LINE" value="false" />
|
||||
<option name="EMULATE_TERMINAL" value="false" />
|
||||
<option name="MODULE_MODE" value="false" />
|
||||
<option name="REDIRECT_INPUT" value="false" />
|
||||
<option name="INPUT_FILE" value="" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<recent_temporary>
|
||||
<list>
|
||||
<item itemvalue="Python.zavrazhnova_svetlana_lab_2" />
|
||||
</list>
|
||||
</recent_temporary>
|
||||
</component>
|
||||
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="0ceb130e-88da-4a20-aad6-17f5ab4226ac" name="Changes" comment="" />
|
||||
<created>1695412818437</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1695412818437</updated>
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="Vcs.Log.Tabs.Properties">
|
||||
<option name="TAB_STATES">
|
||||
<map>
|
||||
<entry key="MAIN">
|
||||
<value>
|
||||
<State />
|
||||
</value>
|
||||
</entry>
|
||||
</map>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
30
zavrazhnova_svetlana_lab_2/README.md
Normal file
30
zavrazhnova_svetlana_lab_2/README.md
Normal file
@ -0,0 +1,30 @@
|
||||
### Задание по варианту
|
||||
Лассо (Lasso),Сокращение признаков Случайными деревьями (Random Forest Regressor), Линейная корреляция (f_regression)
|
||||
|
||||
### Как запустить лабораторную работу
|
||||
ЛР запускается через файл `zavrazhnova_svetlana_lab_2.py`
|
||||
|
||||
### Какие технологии использовали
|
||||
импорт класса `MinMaxScaler`, выполняющего масштабирование данных до заданного диапазона (от 0 до 1).
|
||||
Необходимость его использования объясняется следующим: каждая модель регрессии дает оценки
|
||||
важности признаков в своем диапазоне. Для того чтобы найти признак с максимальной средней важностью по трем моделям, нам необходимо привести выданные ими оценки к одному виду.
|
||||
Модели линейной регрессии, ридж-регрессии и лассо-регрессии из библиотеки `scikit-learn`
|
||||
|
||||
### Что делает
|
||||
Применение регрессионных моделей для определения важности признаков.
|
||||
|
||||
Результат работы программы показывает ранжирование признаков по их значимости для задачи. Чем больше значение ранга, тем более значимый признак.
|
||||
Полученные ранги можно использовать для отбора наиболее значимых признаков и сокращения размерности данных.
|
||||
|
||||
### Примеры выходных значений
|
||||
|
||||
![example program result](result.png)
|
||||
|
||||
В данном случае, в соответствии с полученными результатами, можно сказать следующее:
|
||||
|
||||
1. Признаки 'x4' и 'x14' имеют наивысшие ранги (больше 380), что указывает на их большую значимость в решении задачи.
|
||||
2. Признаки 'x2' и 'x12' имеют средние ранги (от 170 до 180), что означает их среднюю значимость.
|
||||
3. Признаки 'x1' и 'x11' имеют ранги около 120, что указывает на их относительную значимость.
|
||||
4. Признаки 'x5', 'x8' и 'x7' имеют низкие ранги (от 5 до 17), что говорит о их низкой значимости.
|
||||
5. Признаки 'x9', 'x3', 'x13', 'x10' и 'x6' имеют очень низкие ранги (меньше 3), что указывает на их минимальную значимость или наличие практически нулевых эффектов.
|
||||
|
BIN
zavrazhnova_svetlana_lab_2/result.png
Normal file
BIN
zavrazhnova_svetlana_lab_2/result.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
54
zavrazhnova_svetlana_lab_2/zavrazhnova_svetlana_lab_2.py
Normal file
54
zavrazhnova_svetlana_lab_2/zavrazhnova_svetlana_lab_2.py
Normal file
@ -0,0 +1,54 @@
|
||||
from sklearn.linear_model import Lasso
|
||||
from sklearn.ensemble import RandomForestRegressor
|
||||
from sklearn.feature_selection import f_regression
|
||||
from sklearn.preprocessing import MinMaxScaler
|
||||
import numpy as np
|
||||
|
||||
np.random.seed(0)
|
||||
size = 750
|
||||
#входные данные.
|
||||
X = np.random.uniform(0, 1, (size, 14))
|
||||
|
||||
#Генерируется целевая переменная Y на основе математической функции от входных данных X.
|
||||
Y = (10 * np.sin(np.pi*X[:,0]*X[:,1]) + 20*(X[:,2] - .5)**2 +
|
||||
10*X[:,3] + 5*X[:,4]**5 + np.random.normal(0,1))
|
||||
X[:,10:] = X[:,:4] + np.random.normal(0, .025, (size,4))
|
||||
|
||||
names = ["x%s" % i for i in range(1,15)]
|
||||
#Создается пустой словарь для хранения рангов признаков
|
||||
ranks = {}
|
||||
|
||||
#Создается экземпляр модели лассо-регрессии
|
||||
lasso = Lasso(alpha=.05)
|
||||
#Модель подгоняется под входные данные X и целевую переменную Y
|
||||
lasso.fit(X, Y)
|
||||
ranks["Lasso"] = dict(zip(names, lasso.coef_))
|
||||
|
||||
rf = RandomForestRegressor(n_estimators=100, random_state=0)
|
||||
rf.fit(X, Y)
|
||||
ranks["Random Forest"] = dict(zip(names, rf.feature_importances_))
|
||||
|
||||
f, _ = f_regression(X, Y, center=True)
|
||||
ranks["f_regression"] = dict(zip(names, f))
|
||||
|
||||
def rank_to_dict(ranks, names):
|
||||
ranks = np.abs(ranks)
|
||||
minmax = MinMaxScaler()
|
||||
#масштабирование рангов с помощью MinMaxScaler
|
||||
ranks = minmax.fit_transform(np.array(ranks).reshape(-1, 1)).ravel()
|
||||
ranks = map(lambda x: round(x, 2), ranks)
|
||||
return dict(zip(names, ranks))
|
||||
|
||||
#словарь для хранения средних рангов признаков
|
||||
mean = {}
|
||||
for key, value in ranks.items():
|
||||
for item in value.items():
|
||||
if item[0] not in mean:
|
||||
mean[item[0]] = 0
|
||||
mean[item[0]] += item[1]
|
||||
|
||||
sorted_mean = sorted(mean.items(), key=lambda x: x[1], reverse=True)
|
||||
result = {}
|
||||
for item in sorted_mean:
|
||||
result[item[0]] = item[1]
|
||||
print(f'{item[0]}: {item[1]}')
|
Loading…
Reference in New Issue
Block a user