日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

医学数据挖掘学习项目:他克莫司

發(fā)布時(shí)間:2025/4/5 编程问答 94 豆豆
生活随笔 收集整理的這篇文章主要介紹了 医学数据挖掘学习项目:他克莫司 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

1. 報(bào)告

2. 代碼1:從數(shù)據(jù)庫(kù)中提取數(shù)據(jù)

lambda,匿名函數(shù),快速定義單行函數(shù),可以用在任何需要函數(shù)的地方。

numpy.array 和 python.array

python.filter(function, iterable)函數(shù)

python zip(a, b)

pandas創(chuàng)建DataFrame()數(shù)據(jù)

pandas判斷是否是空值NaN,isnull(),notnull()

pandas.reset_index()

pandas.astype()

pandas.Excel_Writer()輸出到excel

mysql

pandas.concat()函數(shù)

pandas merge()方法

pandas.concat() 和 pandas.merge()區(qū)別

pandas rename()方法

pandas.DataFrame.columns

pandas.loc[行,列]?

pandas.iloc[行號(hào),列號(hào)]

pandas.drop()函數(shù)

pandas.drop_duplicates()方法

pandas.isnull() 和 .notnull()

pandas.DataFrame.replace(to_place, value)

pandas數(shù)據(jù)透視表pivot_table(data,values,index,columns,aggfunc='mean')

pandas DataFrame.sort_values()方法

pandas.groupby()方法

pandas statsmodels

pandas DataFrame.describe()

pandas.get_dummies

3. 代碼2:初始方案數(shù)據(jù)清洗

pydotplus

pylab

Ipython.display.image

time.time()

datetime.datetime.strptime(x, %Y-%m-%d %H:%M:%S)

datetime.timedelta(days=2)

TDM

bug

python list(range(9))

4. 代碼3:調(diào)整方案數(shù)據(jù)清洗

5. 代碼4:初始&調(diào)整方案建模

sklearn.model_selection

sklearn.metrics

sklearn.train_test_split

sklearn分類器classifier和回歸其regressor的區(qū)別

sklearn選擇合適的算法/sklearn中各種分類器regressor都適用于什么樣的數(shù)據(jù)

python auto_ml

誤差(error),偏差(bias),方差(variance)有什么區(qū)別和聯(lián)系?

scipy.stats

Mann-Whitney U 檢驗(yàn)

卡方檢驗(yàn),檢驗(yàn)兩個(gè)變量之間有沒有關(guān)系

重要性評(píng)分柱狀圖

SHAP圖

matplotlib

from matplotlib import pyplot as plt

python seaborn

SPSS傾向性分析

logistic回歸

牛頓迭代法(Newton-Raphson)


1. 報(bào)告

know what, know how。知道是干什么的,怎么干的

目的:他克莫司用藥日劑量

XGBoost, GBDT, Boosting, boosting,誤分類樣本的權(quán)值之和影響誤差率,誤差率影響分類器在最終分類器中的權(quán)重。

基分類器,h1的權(quán)重,誤差越大,權(quán)重越小

分類器:

樣本權(quán)重更新:

XGBoost輸出變量重要性 -->xgb.importance返回由f分?jǐn)?shù)測(cè)量的特征重要范圍

stepwise regression逐步回歸

propensity score傾向性評(píng)分 <--由于實(shí)驗(yàn)組和對(duì)照組兩組病人的基線水平存在差異,傾向性評(píng)分匹配法消除數(shù)據(jù)集中的混雜因素。

==>兩獨(dú)立樣本t檢驗(yàn):方差齊性檢驗(yàn),p,0.05;t檢驗(yàn)/修正t檢驗(yàn)

比較特征的差異顯著性:連續(xù)特征,Mann-Whitney U檢驗(yàn);離散特征,卡方檢驗(yàn)。

2. 代碼1:從數(shù)據(jù)庫(kù)中提取數(shù)據(jù)

(1) database:surgical_record

.ipynb文件為Jupyter notebook,是一個(gè)python交互式筆記本,包含代碼、運(yùn)行結(jié)果展示、其他內(nèi)部設(shè)置

data: surgical_record['surgery_NAME'].str.contains('腎’)

  • .pandas.str.contains()篩選出包含特殊字符的數(shù)列,返回布爾值系列或索引
  • .numpy.unique()函數(shù),去除列表或數(shù)組中重復(fù)的元素,并按元素從小到大返回一個(gè)新的無重復(fù)元素的新列表或元組。
  • .shape輸出DataFrame行列數(shù)。shape[0] 行;shape[1] 列

lambda,匿名函數(shù),快速定義單行函數(shù),可以用在任何需要函數(shù)的地方。

lambda 參數(shù) :操作(參數(shù))

  • apply(),對(duì)數(shù)據(jù)框(DataFrame)(類似矩陣)的數(shù)據(jù)進(jìn)行按行或按列操作時(shí)用apply(),默認(rèn)axis=0,按行;axis=1,按列
  • map(),對(duì)series的每一個(gè)數(shù)據(jù)進(jìn)行操作時(shí)用map()

np.nan,創(chuàng)建空值

numpy.array 和 python.array

numpy.array,生成一個(gè)數(shù)組,他的強(qiáng)大在于可以生成多維數(shù)據(jù),而python.array只支持以為數(shù)組。

python.filter(function, iterable)函數(shù)

  • function -- 判斷函數(shù)
  • iterable -- 可迭代對(duì)象/序列

python zip(a, b)

將對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的列表

pandas創(chuàng)建DataFrame()數(shù)據(jù)

本質(zhì)是通過list列表創(chuàng)建

  • 方法1: 通過列表創(chuàng)建

li = [
? ? [1, 2, 3, 4],
? ? [2, 3, 4, 5]
]

# DataFRame對(duì)象里面包含兩個(gè)索引, 行索引(0軸, axis=0), 列索引(1軸, axis=1)
d1 = pd.DataFrame(data=li, index=['A', 'B'], columns=['views', 'loves', 'comments', 'tranfers'])
print(d1)

  • 方法2: 通過numpy對(duì)象創(chuàng)建

narr = np.arange(8).reshape(2, 4)
# DataFRame對(duì)象里面包含兩個(gè)索引, 行索引(0軸, axis=0), 列索引(1軸, axis=1)
d2 = pd.DataFrame(data=narr, index=['A', 'B'], columns=['views', 'loves', 'comments', 'tranfers'])
print(d2)

  • 方法3: 通過字典的方式創(chuàng)建;

dict = {
? ? 'views': [1, 2, ],
? ? 'loves': [2, 3, ],
? ? 'comments': [3, 4, ]

}
d3 = pd.DataFrame(data=dict, index=['粉條', "粉絲"])
print(d3)

  • DataFrame提取某幾列數(shù)據(jù)

list = ['text', 'image', 'voice']

df_p = df[[list]]

pandas判斷是否是空值NaN,isnull(),notnull()

pd.DataFrame([('bird',389), ('bird',24), ('mammal',80), ('mammal', np.nan)], index(行)=['falcon','parrot','lion','monkey'], columns=('class', 'max_speed')?)

classmax_speed
falconbird389
parrotbird24
lionmanmmal80.5
monkeyhmanmmalNaN

pandas.reset_index()

把就索引列添加為列,并使用心得順序索引。drop參數(shù)=True,避免將舊索引添加為列,默認(rèn)為False

  • pandas.set_index,把數(shù)據(jù)列設(shè)為索引列

pandas.astype()

因?yàn)槎鄠€(gè)表合并到一個(gè)表,輸出列Excel表發(fā)生數(shù)據(jù)錯(cuò)誤,e.g.數(shù)值型數(shù)據(jù)末尾變0,所以python強(qiáng)制類型轉(zhuǎn)換。

df.astype('數(shù)據(jù)類型')

df['列名'].astype('數(shù)據(jù)類型')? --一列數(shù)據(jù)類型改變

pandas.Excel_Writer()輸出到excel

writer=pd.ExcelWriter(project_path + '/data/data_from_mysql/df_檢驗(yàn)序號(hào)索引.xlsx') test_record_tcms.to_excel(writer) writer.save()

(2) 用藥醫(yī)囑表單

mysql

# 連接mysql數(shù)據(jù)庫(kù) conn = MySQLDB.connect(host='localhost', port=3306, user='root', password='123456', db='mdnov_ciip_ipharma_zdy', charset='UTF8') cursor = conn.cursor() cursor.execute("Select version()") for i in cursor:print(i)try:sql = 'select TEST_RECORD_ID,PROJECT_CODE,PROJECT_NAME,TEST_RESULT,RESULT_UNIT,IS_NORMAL,REFER_SCOPE from test_result;'test_result = pd.read_sql(sql, conn) except MySQLDB.err.ProgrammingError as e:print('test_result Error is ' + str(e))sys.exit()

where子句,有條件的從表中選取數(shù)據(jù)

pandas DataFrame.head(),返回?cái)?shù)據(jù)幀或序列的前n行(默認(rèn)值為5)

pandas.concat()函數(shù)

用來連接DataFrame對(duì)象,行列相同或行列不同,缺失部分為NaN

pandas merge()方法

left,拼接的左側(cè)DataFrame對(duì)象。

right,拼接的右側(cè)DataFrame對(duì)象。

on,要加入的列或索引級(jí)別名稱

how,inner,交集;outer,并集;left只用左側(cè);right只用右側(cè)keys

pandas.concat() 和 pandas.merge()區(qū)別

concat() 是上下拼接;merge()是左右合并

pandas rename()方法

修改DataFrame的個(gè)別列名或索引,e.g. df.rename({'表1':'緯度'})

pandas.DataFrame.columns

返回列標(biāo)簽

(3) 檢驗(yàn)表單

pandas.loc[行,列]?

e.g. temp.loc[0:2,'Drug_Name'],loc表示location,.loc[['Drug_Name', 'Project_Name']]

pandas.iloc[行號(hào),列號(hào)]

e.g. [0:3, [4:6]],第3行取不到,第6列能取到

pandas.drop()函數(shù)

DataFrame刪除一行或一列。默認(rèn)axis=0,行;axis=1,列

pandas.drop_duplicates()方法

.drop_duplicates(subset='列名',keep='first',inplace='True'),刪除DataFrame某列中重復(fù)項(xiàng)的函數(shù)

  • subset='列名1' 或 ['列名1','列名2']
  • keep='first' 或 'last',保留第一個(gè)或最后一個(gè)

pandas.isnull() 和 .notnull()

判斷缺失值一般采用isnull()和notnull()。

.isnull().sum(),每列缺失值的數(shù)量

(4) 檢驗(yàn)結(jié)果表單

pandas.DataFrame.replace(to_place, value)

將to_replace數(shù)值/字符串替換為value

pandas數(shù)據(jù)透視表pivot_table(data,values,index,columns,aggfunc='mean')

  • values,可以對(duì)需要的計(jì)算數(shù)據(jù)進(jìn)行篩選
  • 每個(gè)pivot_table必須擁有一個(gè)index, index=['對(duì)手'],
  • columns,類似index可以設(shè)置列層次字段,它不是必要參數(shù),作為一種分割數(shù)據(jù)的可選方式
  • aggfunc,可以設(shè)置我們對(duì)數(shù)據(jù)聚合時(shí)進(jìn)行的函數(shù)操作

pandas DataFrame.sort_values()方法

.sort_values(by='##', axis=0, ascending=True, inplace=Flase),根據(jù)指定列數(shù)據(jù)排序

  • by,指定列名(axis=0,行) 或 索引名(axis=1,列)
  • ascending, 默認(rèn)True,升序
  • inplace,默認(rèn)False,排序后數(shù)據(jù)不替換原來的數(shù)據(jù)

(5) 診斷表單

pandas.groupby()方法

.groupby(by=['列名'], axis=0, as_index)

  • as_index按某一列分組,相同字段分到同一組。將分組列名作為輸出索引
  • mean()方法求平均值

pandas statsmodels

傳統(tǒng)頻率學(xué)派統(tǒng)計(jì)方法

  • statsmodels.api:模型和方法
  • statsmodels.tsa.api:統(tǒng)計(jì)和測(cè)試
  • statsmodels.formula.api:模型,從公式和數(shù)據(jù)框創(chuàng)建模型

pandas DataFrame.describe()

用于查看一些基本的統(tǒng)計(jì)信息,e.g. 百分位數(shù),均值,標(biāo)準(zhǔn)差

pandas.get_dummies

pandas從DataFrame數(shù)據(jù)實(shí)現(xiàn)one hot encode的方式。

3. 代碼2:初始方案數(shù)據(jù)清洗

pydotplus

pydotplus -->繪圖,比Graphviz支持中文

pylab

pylab是matplotlib的一個(gè)子包,適合交互式繪圖

pylab.mpl -->rcParams解決matplotlib無法顯示中文或負(fù)號(hào)的情況

# 支持顯示中文 mpl.rcParams['font.sans-serif'] = ['SimHei'] ##繪圖顯示中文 mpl.rcParams['axes.unicode_minus'] = False

Ipython.display.image

顯示圖像,Ipython是一個(gè)python的交互式shell,比python shell好用。利用python進(jìn)行科學(xué)計(jì)算和交互可視化的一個(gè)最佳平臺(tái)

  • 強(qiáng)大的python交互式shell
  • 共Jupyter notebooks使用的一個(gè)Jupyter內(nèi)核(Ipython notebook)

time.time()

獲取當(dāng)前時(shí)間

datetime.datetime.strptime(x, %Y-%m-%d %H:%M:%S)

將數(shù)據(jù)轉(zhuǎn)換為日期的方法

datetime.timedelta(days=2)

對(duì)象代表兩個(gè)時(shí)間之間的時(shí)間差,兩個(gè)date或datetime對(duì)象相減可以返回一個(gè)timedelta對(duì)象。

TDM

治療藥物監(jiān)測(cè),測(cè)定藥物濃度,therapeutic drug monitoring

bug

  • 295,數(shù)據(jù)清洗-->刪除沒有tdm檢測(cè)的病人,需要人工設(shè)置patient_id
  • 312,
  • python list(range(9))

    可以把range()返回的可迭代對(duì)象轉(zhuǎn)化為一個(gè)列表

    (2) 篩選初始方案中tdm符合終點(diǎn)事件的用藥和tdm檢測(cè)組合

    (3) 篩選調(diào)整方案中tdm符合終點(diǎn)事件的用藥和tdm檢測(cè)組合

    (4) 初始方案所有變量數(shù)據(jù)清洗

    • BMI:身體質(zhì)量指數(shù)
    • DataFrame取多列數(shù)據(jù)用[]把多個(gè)列名括起來,[['drug_name', 'project_name']]

    (5) 其他用藥

    start_time <= TDM

    end_time >= tcms_3 days前

    4. 代碼3:調(diào)整方案數(shù)據(jù)清洗

    Graphviz -->開源的強(qiáng)大繪圖工具,編寫dot腳本

    %matplotlib inline -->用再Jupyter notebook中具體作用是當(dāng)你調(diào)用matplotlib.pyplot的繪圖函數(shù)plot()進(jìn)行繪圖時(shí),或者生成一個(gè)figure畫布的時(shí)候,可以直接在你的python console里面生成圖像。

    5. 代碼4:初始&調(diào)整方案建模

    sklearn.model_selection

    .model_selection,主要是對(duì)數(shù)據(jù)的分割,以及與數(shù)據(jù)分割相關(guān)的功能

    train_test_split方法,將原始數(shù)據(jù)集劃分成train和test兩部分

    sklearn.metrics

    • accuracy_score -->所有分類正確的百分比,
    • .log_log,對(duì)數(shù)損失或交叉熵?fù)p失
    • confusion_matrix --> 混淆矩陣
    predictual class

    Actual

    class

    • 計(jì)算R方。from sklearn.metrics import r2_score

    R2的定義如下:![Alt]在這里插入圖片描述從公式來看,即使我們不使用任何模型,僅僅用目標(biāo)集標(biāo)簽的平均值,就能讓R2_score為0,如果值為負(fù)數(shù),則表示我們預(yù)測(cè)的結(jié)果還不如測(cè)試集中的y_label的平均值準(zhǔn)確

    ?

    sklearn.train_test_split

    用來隨機(jī)劃分樣本數(shù)據(jù)為訓(xùn)練集和測(cè)試集

    train_x, test_x, train_y, test_y = train_test_split(train_data,train_target,test_size=0.2,random_state=5)
    • train_data,待劃分樣本數(shù)據(jù)
    • train_target,待劃分樣本數(shù)據(jù)結(jié)果標(biāo)簽
    • test_size:測(cè)試集占比
    • random_state:設(shè)置隨機(jī)數(shù)種子。若為0或不填,則每次得到的數(shù)據(jù)都不同。隨機(jī)數(shù)種子用于生成偽隨機(jī)數(shù),真隨機(jī)數(shù)是指現(xiàn)實(shí)物理現(xiàn)象。

    sklearn分類器classifier和回歸其regressor的區(qū)別

    標(biāo)簽數(shù)據(jù)labeled data

    • classification:which category,識(shí)別物體屬于哪一類。Identifying which category an object belongs to。應(yīng)用:垃圾郵件檢測(cè),圖像識(shí)別等。score函數(shù)計(jì)算的是精確度,accuracy_score --> mean accuracy
    • regression:quantity,預(yù)測(cè)與物體相關(guān)的連續(xù)值屬性。Predicting a continuous-valued attribute associated with an object.應(yīng)用:藥物反應(yīng)、股票價(jià)格。score函數(shù)計(jì)算的是,r2_score -->預(yù)測(cè)的r2決定系數(shù)
    • clustering: Automatic grouping of similar objects into sets.應(yīng)用:用戶細(xì)分,分組實(shí)驗(yàn)結(jié)果。
    • Dimensionality relation:降維,reducing the number of random variables to consider。應(yīng)用:可視化,提高效率
    • Model selection: comparing, validating and choosing parameters and models. 應(yīng)用:通過參數(shù)調(diào)整提高精度
    • Processing:Feature extraction and normalization.應(yīng)用:轉(zhuǎn)換輸入數(shù)據(jù),例如用于機(jī)器學(xué)習(xí)算法的文本

    sklearn選擇合適的算法/sklearn中各種分類器regressor都適用于什么樣的數(shù)據(jù)

    選擇合適的ML Algorithms。不存在一個(gè)再各方面都最好的模型/算法,需要針對(duì)具體問題,找到最好的機(jī)器學(xué)習(xí)算法

  • 數(shù)據(jù)分析(Exploratory Data Analysis)。在選擇具體的算法之前,最好對(duì)數(shù)據(jù)中每一個(gè)特征的模式和產(chǎn)生原理有一定的了解。e.g. 特征是連續(xù)的(real-valued)還是離散的(discrete)?
  • 特征工程(Feature Engineering)。特征工程(根據(jù)現(xiàn)有的特征,制造出新的有價(jià)值的特征)決定了機(jī)器學(xué)習(xí)能力的上限,各種算法不過是在逼近這個(gè)上限而已。不同的ML Algorithms一般會(huì)有其對(duì)應(yīng)的不同的特征工程。在實(shí)踐中,特征工程,調(diào)整算法參數(shù)這兩個(gè)步驟常常往復(fù)進(jìn)行。
  • 具體算法選擇。3.1) General Linear Models(high bias高偏差, low variance低方差) 如果對(duì)超參數(shù)沒什么特別要求,可以通過自動(dòng)的交叉驗(yàn)證來確定超參的值。線性分類器中,最好用的是logistic regression和相應(yīng)的logistic regression CV。3.2) Ensemble methods。Bagging(random forest),用數(shù)據(jù)不同部分訓(xùn)練一群high variance算法來降低算法整體的方差;boosting(XGBoost),通過以此建立high bias算法來提升整體的variance。3.3) SVM。sum表現(xiàn)不如XGBoost。3.4) Neural Network。sklearn的神經(jīng)網(wǎng)絡(luò)庫(kù)不如tensorflow、keras、pytorch、theane等
  • python auto_ml

    用于生產(chǎn)和分析的自動(dòng)化機(jī)器學(xué)習(xí)模塊,包括:分析、特征工程、自動(dòng)縮放、特征選擇、模型選擇、超參優(yōu)化、大數(shù)據(jù)

    from auto_ml import Predictor from auto_ml.utils import get_boston_dataset from auto_ml.utils_models import load_ml_model

    from auto_ml import Predictor
    1) 首先創(chuàng)建Predictor預(yù)測(cè)期
    ? ? Predictor(type_of_estimator=, column_descriptions=)
    ? ? ·type_of_estimator,指定預(yù)測(cè)器類型(classifier or regressor)
    ? ? ·column_descriptions,字典類型,指定字段描述信息,如果為分類任務(wù),需要制定Y所在的列(output)

    2) ml_predictor.train(train_data, model_names=['XGBoost'])

    ? 2.1) auto_ml集成了DeepLearningClassifier, DeepLearningRegressor, XGBClassifier, XGBRegressor, LGBMClassifier, LGBMRegressor, CatBoostClassifier, CatBoostRegressor,在model_names參數(shù)中選擇。

    ? 2.2) auto_ml中的feature_learning=Ture,用深度學(xué)習(xí)為我們學(xué)習(xí)特征,梯度提升將這些特征轉(zhuǎn)化為準(zhǔn)確的預(yù)測(cè) ==> 這種混合方法比任何一種方法都要精確5%,但要防止過擬合

    3) ml_predictor.score(test_x, test_x['日劑量']) 。

    # Score the model on test data

    Returns the coefficient of determination R^2 of the prediction. 不是計(jì)算準(zhǔn)確度R^2,r2計(jì)算在from sklearn.metrics import r2_score

    4) 保存。file_name = ml_predictor.save()

    5) 導(dǎo)入訓(xùn)練好的model。trained_model = load_ml_model(file_name)

    6) 預(yù)測(cè)。predictions = trained_model.predict(test_x)?

    報(bào)錯(cuò):

    RuntimeError:

    ????????An attempt has been made to start a new process before the

    ????????current process has finished its bootstrapping phase.

    ??

    ????????This probably means that you are not using fork to start your

    ????????child processes and you have forgotten to use the proper idiom

    ????????in the main module:

    解決:設(shè)置一個(gè)main()函數(shù),控制多線程。

    參考:Python多進(jìn)程報(bào)錯(cuò):RuntimeError: An attempt has been made to start a new process before the current process...

    誤差(error),偏差(bias),方差(variance)有什么區(qū)別和聯(lián)系?

    error=bias + variance,反映的是整個(gè)模型的準(zhǔn)確度。

    • bias,偏差。描述的是樣本擬合出的model的輸出預(yù)測(cè)結(jié)果的期望與樣本真實(shí)結(jié)果的差距。簡(jiǎn)單講,就是樣本你和的好不好。(training set) 要想在bias上表現(xiàn)好,low bias,就得復(fù)雜化模型,增加模型的參數(shù),但這樣容易過擬合(overfitting),過擬合容易使正確的數(shù)據(jù)錯(cuò)分,造成方差過大high variance,點(diǎn)很分散。
    • variance,方差。描述的是樣本上訓(xùn)練出來的模型在測(cè)試集上的表現(xiàn),要想在variance上表現(xiàn)好,low variance,就要簡(jiǎn)化模型,減少模型的參數(shù),但這樣容易欠擬合(unfitting),欠擬合對(duì)應(yīng)上面的high bias,錯(cuò)誤的數(shù)據(jù)被誤認(rèn)為正確,點(diǎn)偏離中心。
    • bias可以理解為偏見,對(duì)數(shù)據(jù)是否一視同仁,高偏見high bias,準(zhǔn)確但分散。high bias+low variance --> model太簡(jiǎn)陋,準(zhǔn)確度低;low bias + high variance --> model普適性差
    • 在訓(xùn)練集上,可以進(jìn)行交叉驗(yàn)證(cross-validation)。一種方法叫k-fold cross validation(k-折交叉驗(yàn)證);初始樣本分割成k個(gè)子樣本,一個(gè)單獨(dú)的子樣本被保留作為驗(yàn)證模型的數(shù)據(jù),其他k-1個(gè)樣本用來訓(xùn)練。交叉驗(yàn)證重復(fù)k次,每個(gè)子樣本驗(yàn)證一次,平均k次的結(jié)果或使用其他結(jié)合方式,最終得到一個(gè)單一估測(cè) ==> 降低異常數(shù)據(jù)對(duì)模型的影響。k大時(shí),偏差越小,方差越大;k小時(shí),偏差越大,方差越小。

    scipy.stats

    python統(tǒng)計(jì)函數(shù)率,該模塊包含大量概率分布、匯總和頻率統(tǒng)計(jì),相關(guān)函數(shù)和統(tǒng)計(jì)檢驗(yàn)、屏蔽統(tǒng)計(jì),核密度估計(jì)、Monte Carlo等。e.g. Mann-Whitney U test, Wilcoxon signed rank test, Chi-square test.

    Mann-Whitney U 檢驗(yàn)

    是檢驗(yàn)兩個(gè)獨(dú)立樣本差異性的測(cè)試(在數(shù)據(jù)分布上是否有差異)。當(dāng)樣本正態(tài)分布、方差齊次等不能達(dá)到t檢驗(yàn)的要求時(shí),可以用Mann-Whitney U test。

    檢驗(yàn)基礎(chǔ):若兩個(gè)樣本有差異,則他們中心位置不同。

    e.g. 春夏季犯罪數(shù)據(jù)是否有差異。原假設(shè):無,顯著性差異P值 < 0.05,顯著 ==> 有差異。

    return: statistic: float = min(U for x, U for y); P值: float

    卡方檢驗(yàn),檢驗(yàn)兩個(gè)變量之間有沒有關(guān)系

    from scipy.stats import chi2_contingency

    卡方檢驗(yàn)要求X、Y都是定類數(shù)據(jù)

    自由度 = (行數(shù)-1) * (列數(shù)-1) ==>查詢得到臨界值 ==> 卡方< 臨界值,成立

    scipy.stats.chi2_contingency(observed), observed, array_like, R*C table, 默認(rèn)Pearson's 卡方統(tǒng)計(jì)

    Return ==> chi2: float; p: float; dof: 自由度; expected: 預(yù)期頻率

    · 用log-likelihood ratio --> chi2——contingency(obs, lambda_ = 'log-likelihood')

    重要性評(píng)分柱狀圖

    重要性評(píng)分~參考:Python中XGBoost的特性重要性和特性選擇_liuzh的博客-CSDN博客

    1) 注意數(shù)據(jù)類型!!

    ? ? ? ? .colums()函數(shù)返回index object;importance返回np.ndarray;pd.DataFrame主要是根據(jù)list列表數(shù)據(jù)生成

    2) ValueError: shape of passed value is (3,1), indices imply (3,3)

    ? ? ? ? np.array().reshape(3,4)

    3) plt.bar不顯示中文

    from pylab import mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] ##繪圖顯示中文 mpl.rcParams['axes.unicode_minus'] = Falsefrom matplotlib import pyplot as plt import matplotlib.ticker as ticker from matplotlib import rcrc('mathtext', default='regular')

    SHAP圖

    參考:SHAP:Python的可解釋機(jī)器學(xué)習(xí)庫(kù) - 孫佳偉的文章 - 知乎

    SHAP圖的基礎(chǔ)是shap values(歸因值)和shape interaction values(交互歸因值),基于此二值可以生成:

    • force plot。單個(gè)樣本預(yù)測(cè)的解釋
    • summary plot。全部樣本預(yù)測(cè)的解釋
    • dependency plot。特征值大小與預(yù)測(cè)影響之間的關(guān)系。

    matplotlib

    • .pyplot:繪圖模塊,讓用戶繪制2D圖表。

    • .ticker:用于配置刻度定位和格式的類。其中Locater類根據(jù)數(shù)據(jù)限制和刻度位置的選擇處理視圖限制的自動(dòng)縮放

    • .rc:設(shè)置當(dāng)前的rcParams,e.g. linewidth,color

    • axes.Axes.get_figure(),獲取fiture實(shí)例。

    from matplotlib import pyplot as plt

    • plt.plot(x,y,[fmt],**kwargs),點(diǎn)或線的x, y坐標(biāo),[fmt]包含顏色color,標(biāo)記marker,linestyle等可迭代參數(shù)。label=' ' 是**kwargs中可用的其他參數(shù)
    • plt.legend(loc, bbox_to_anchor=(1.1,1)),顯示圖例
    • plt.xlabel 和 plt.ylabel,設(shè)置坐標(biāo)軸標(biāo)簽
    • plt.savefig() 保存圖例,需要想創(chuàng)建好保存路徑,savefig只能保存不能創(chuàng)建。dpi分辨率
    • plt.figure(figsize=(15, 8)),設(shè)置fiture的寬和高
    • plt.sticks,設(shè)置x坐標(biāo)軸的刻度及標(biāo)簽。rotation=75 --> 標(biāo)簽旋轉(zhuǎn);tick,刻度
    • plt.text(a, b+2, ha=, va=, fontsize= ) ,將文本添加到x,y的坐標(biāo)軸上。hahorizontalalignment的縮寫,設(shè)置水平對(duì)齊方式;va是vertical縮寫,設(shè)置垂直對(duì)齊方式。
    • plt.show() 畫圖。調(diào)用pyplot.show()后保存圖形會(huì)導(dǎo)致文件為空
    • matplotlib畫圖的時(shí)候怎么清空之前圖片。

    clf() # 清圖。cla() # 清坐標(biāo)軸。close() # 關(guān)窗口

    python seaborn

    實(shí)在matplotlib基礎(chǔ)上面的封裝,方便直接傳參調(diào)用。

    • seaborn.boxplot(x,y, hu, data=df_box, color=()) 繪制箱線圖

    SPSS傾向性分析

    匹配估計(jì)的思想:if你要研究企業(yè)R&D投入對(duì)performance的影響。有兩家企業(yè),其R&D投入明顯不同,但是其他各方面都高度相同,e.g. 公司規(guī)模、杠桿率、所屬行業(yè)、公司治理結(jié)構(gòu)等,那么在其他各方面都高度相同的情況下,這是就可以吧公司performance的差異鬼影刀R&D投入的差異。

    這種找到一個(gè)控制組(實(shí)驗(yàn))的個(gè)體,使得該個(gè)體與處理組(對(duì)照)的個(gè)體在除自變量外其他各因素都相似(也就是匹配),在通過自變量的差異解釋因變量差異的行為,就是匹配的思想。

    一般來說,每個(gè)樣本有多個(gè)屬性,e.g.一家公司,屬性有公司規(guī)模、公司年齡、杠桿率、增長(zhǎng)率、市場(chǎng)占有率、行業(yè)等,這就意味著匹配時(shí)要考慮諸多屬性,也就是進(jìn)行高維度匹配,一個(gè)比較好的思路是定義高維空間的距離,然后計(jì)算兩個(gè)樣本在高維空間的距離。

    但高維匹配并不容易,因?yàn)榫S度越高找一個(gè)各方面相似的兩個(gè)個(gè)體越難。

    引入--> 傾向性評(píng)分匹配(Propensity score matching, PSM),定義一個(gè)個(gè)體進(jìn)入處理組的概率。

    PSM是指,某個(gè)體在處理組,找一個(gè)其他各方面與該個(gè)體盡量相似的控制組個(gè)體的概率。

    PSM匹配的是自變量之外(R&D)的需要控制的其他所有協(xié)變量X。根據(jù)PS分值,SPSS篩選出匹配成功的match_id對(duì)(可根據(jù)實(shí)際情況選擇合適的ps限定,增加匹配成功數(shù))

    PSM:如果自變量是連續(xù)變量,需要轉(zhuǎn)換為二元離散變量。

    協(xié)變量:指與因變量有線性相關(guān),并在探討自變量與因變量關(guān)系時(shí)通過統(tǒng)計(jì)計(jì)數(shù)加以控制的變量。(除自變量與因變量外,其他需要控制的變量)

    傾向得分匹配(PSM)的原理與步驟 - CanisMajoris的文章 - 知乎?

    logistic回歸

    logistic回歸為概率型非線性回歸模型,是研究二分類觀察結(jié)果y與一些影響因素(x1,x2,....,xn)之間關(guān)系的一種多變量分析方法。通常問題是,研究某些因素條件下某個(gè)結(jié)果是否發(fā)生,比如醫(yī)學(xué)中根據(jù)病人的一些癥狀來判斷它是否含有某種病。

    在講解logistic回歸理論之前,先從LR分類器說起,logistic refression classifier。在分類情形下,經(jīng)過學(xué)習(xí)后的LR分類器是一組權(quán)值w0,w1,.....,wn

    x=wo+w1x1+.......+wnxn,xi為n個(gè)特征

    之后按sigmoid函數(shù)的形式求出

    因此,最基本的LR分類器適合二分類。

    logistic回歸最關(guān)鍵的問題是研究如何求得w0, w1, .....wn這組權(quán)值 <=用極大似然估計(jì)來做。

    logistic函數(shù):,g(x) = w0+w1x1+......+wnxn

    射條件概率P(y=1|x) =p為根據(jù)觀測(cè)量相對(duì)于某事件y發(fā)生的概率。

    牛頓迭代法(Newton-Raphson)

    ?作用:用迭代的方法來求解函數(shù)方程的根。簡(jiǎn)單來說,就是不斷求取切線的過程。

    關(guān)鍵:構(gòu)建迭代式。

    • 根據(jù)泰勒展開近似:?==>?
    • f(x)=0的近似根
    • 迭代式:? ==>若序列收斂于a,a就是非線性方程根。

    總結(jié)

    以上是生活随笔為你收集整理的医学数据挖掘学习项目:他克莫司的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。