Пролог
Порой у каждого из нас возникает вопрос, который не даёт нам покоя. И как правило ответ на такой вопрос можно получить лишь проанализировав опыт большого количества людей. У меня возник такой вопрос: «Какие факторы влияют на IQ и является ли он хоть чуточку преимуществом?». Конечно, читатель может воскликнуть, что всем давно уже все известно и можно прочитать статьи на эту тему. В какой-то степени вы окажитесь правы, но увы, статьи на тему IQ оказались крайне противоречивыми и навязали мне еще большее количество вопросов. Поэтому я и решил провести своё скромное исследование на эту тему.
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import preprocessing
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from sklearn import preprocessing
import warnings
warnings.filterwarnings('ignore')
import random as rn
from sklearn.cross_validation import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestRegressor
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn import svm
data = pd.read_stata('/Users/####/Downloads/ICPSR_08488/DS0001/08488-0001-Data.dta')
data['V288'].replace('IQ75',75,inplace=True )
data['V288'].replace('IQ129',129,inplace=True)
data['V288'].replace('IQ128',128,inplace=True)
#Создаем словарь, где мы будем хранить наши коэффициенты важности переменных
ranks = {}
# Создадим функцию для заполнения нашего словаря
def ranking(ranks, names, order=1):
minmax = MinMaxScaler()
ranks = minmax.fit_transform(order*np.array([ranks]).T).T[0]
ranks = map(lambda x: round(x,2), ranks)
return dict(zip(names, ranks))
#Зададим целевую переменную(Y)
Y = data['V288'].values
#Убираем Y из нашей обучающей выборки
IQ = data.drop(['V288'], axis=1)
X = data.as_matrix()
# Названия колонок
colnames = IQ.columns
%matplotlib inline
from sklearn.feature_selection import RFE, f_regression
from sklearn.linear_model import (LinearRegression, Ridge, Lasso, RandomizedLasso)
from sklearn.preprocessing import MinMaxScaler
from sklearn.ensemble import RandomForestRegressor
# Теперь выявляем наиболее важные признаки
rlasso = RandomizedLasso(alpha=0.04)
Y = data['V288'].values
rlasso.fit(X, Y)
ranks["rlasso/Stability"] = ranking(np.abs(rlasso.scores_), colnames)
print('finished')
r = {}
for name in colnames:
r[name] = round(np.mean([ranks[method][name]
for method in ranks.keys()]), 2)
methods = sorted(ranks.keys())
ranks["Mean"] = r
methods.append("Mean")
print("\t%s" % "\t".join(methods))
for name in colnames:
print("%s\t%s" % (name, "\t".join(map(str,
[ranks[method][name] for method in methods]))))
sorted(r, key=r.get, reverse=True)[:100]
К сожалению, не доступен сервер mySQL