Guest User

Untitled

a guest
Mar 21st, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.22 KB | None | 0 0
  1. import os
  2. import pandas as pd
  3. import numpy as np
  4.  
  5. from sklearn.ensemble import make_stack_layer
  6. from sklearn.preprocessing import FunctionTransformer
  7. from sklearn.experimental import make_column_transformer
  8. from sklearn.pipeline import make_pipeline
  9. from sklearn.preprocessing import StandardScaler
  10. from sklearn.preprocessing import CategoricalEncoder
  11. from sklearn.svm import LinearSVC
  12. from sklearn.dummy import DummyRegressor
  13. from sklearn.linear_model import LogisticRegression
  14. from nilearn.connectome import ConnectivityMeasure
  15. from sklearn.model_selection import cross_val_score
  16. from sklearn.model_selection import StratifiedShuffleSplit
  17.  
  18. path_fmri = '/home/lemaitre/Documents/data/ramp_autism/fmri_filename.csv'
  19. path_anatomy = '/home/lemaitre/Documents/data/ramp_autism/anatomy.csv'
  20. path_participants = ('/home/lemaitre/Documents/data/ramp_autism/'
  21. 'participants.csv')
  22.  
  23. df_fmri = pd.read_csv(path_fmri, index_col=0)['basc064']
  24. df_anatomy = pd.read_csv(path_anatomy, index_col=0)
  25. df_participants = pd.read_csv(path_participants, index_col=0)
  26. df_data = pd.concat([df_anatomy, df_fmri, df_participants[['age', 'sex']]],
  27. axis=1)
  28. X = df_data
  29. y = df_participants['target']
  30.  
  31.  
  32. def _load_fmri(fmri_filenames):
  33. data_path = '/home/lemaitre/Documents/data/ramp_autism'
  34. return np.array(
  35. [pd.read_csv(os.path.join(data_path, subject_filename),
  36. header=None).values
  37. for subject_filename in fmri_filenames])
  38.  
  39.  
  40. transformer_fmri = make_pipeline(
  41. FunctionTransformer(func=_load_fmri, validate=False, check_inverse=False),
  42. ConnectivityMeasure(kind='tangent', vectorize=True))
  43. transformer_anat = StandardScaler()
  44. transformer_sex = CategoricalEncoder(encoding='ordinal')
  45. transformer_age = FunctionTransformer()
  46.  
  47. columns_fmri = 'basc064'
  48. columns_sex = ['sex']
  49. columns_age = ['age']
  50. columns_anat = [name
  51. for name in X.columns
  52. if name not in [columns_fmri] + columns_sex + columns_age]
  53.  
  54.  
  55. def make_domain_estimator(column_name, transformer, estimator):
  56. return make_pipeline(
  57. make_column_transformer((transformer, column_name)),
  58. estimator)
  59.  
  60.  
  61. stacked_estimators = [
  62. ('estimator_fmri', make_domain_estimator(columns_fmri,
  63. transformer_fmri,
  64. LinearSVC())),
  65. ('estimator_anat', make_domain_estimator(columns_anat,
  66. transformer_anat,
  67. LinearSVC())),
  68. ('estimator_age', make_domain_estimator(columns_age,
  69. transformer_age,
  70. DummyRegressor(strategy='input'))),
  71. ('estimator_sex', make_domain_estimator(columns_sex,
  72. transformer_sex,
  73. DummyRegressor(strategy='input')))]
  74.  
  75. layer = make_stack_layer(stacked_estimators, n_jobs=-1)
  76. full_pipeline = make_pipeline(layer, LogisticRegression())
  77.  
  78. results = cross_val_score(full_pipeline, X, y,
  79. cv=StratifiedShuffleSplit(),
  80. scoring='roc_auc',
  81. n_jobs=-1, verbose=100)
  82. # AUC: 0.72 +- 0.3
  83. print(results)
Add Comment
Please, Sign In to add comment