DeepChem手冊第三章3 3教程

2021-10-21 07:13:57 字數 4450 閱讀 9855

3.3 教程

如果你剛接觸deepchem,你可能了解基礎。deepchem是什麼?為什麼你要使用它?

簡單的回答案deepchem是乙個科學的機器學習庫。(「chem」提示乙個歷史事實是deepchem早期是注重於化學應用的,

但是我們現在更廣泛的支援所有的科學應用。)

為什麼你想用deepchem而不是其它的機器學習庫呢?簡單的說,deepchem維護了大量的便於科學的深度學習的工具包括載入科學

資料集,過理它們,轉換它們,分割它們,學習它們的類。除此之外deepchem使用大量的其它機器學習框架如scikit-learn, tensorflow, and xgboost。

我們正在實驗增加用pytorch和jax實施的模型。我們的關注點是用手頭能獲得的任務工具以便於科學實驗。

本教程的後面,我們將提供deepchem』s api的快速瀏覽。deepchem是大型庫,所以我們不會覆蓋所有的方面,但是我們會給你足夠的起點。

內容資料處理

特徵工程

資料分割

模型的訓練與評估

更多的教程

3.3.1資料處理

dc.data模組包含處理資料集對像的工具。這些資料集物件是deepchem的核心。

在機器學習中資料集是資料集合的抽像。我們在此只是展示而不是更深入的解釋。

>>> import deepchem as dc

>>> import numpy as np

>>> n_samples = 50

>>> n_features = 10

>>> x = np.random.rand(n_samples, n_features)

>>> y = np.random.rand(n_samples)

>>> dataset = dc.data.numpydataset(x, y)

>>> dataset.x.shape

(50, 10)

>>> dataset.y.shape

(50,)

這裡我們使用了numpydataset,它是貯存於記憶體的資料集。小對於小型資料集可以工作得很好,很方便實驗,

但是對於大型資料集不太方便。對於大型資料集我們有diskdataset類。

>>> dataset = dc.data.diskdataset.from_numpy(x, y)

>>> dataset.x.shape

(50, 10)

>>> dataset.y.shape

(50,)

這個例子我們沒有指定資料的目錄,因此這個diskdataset存放在臨時資料夾。注意dataset.x和dataset.y

載入自磁碟。因此這對於大型資料集來說代價非常貴。

3.3.2 特徵工程

「featurizer」是轉換原始輸入到經處理的適合機器學習的形式的**塊。dc.feat模組包含大量處理分子、分子複合物和無機晶體的特徵化器。

我們給你展示關於使用特徵化器的例子。

>>> smiles = [

... 'o=cc1ccc(o)c(oc)c1',

... 'cn1ccc[c@h]1c2cccnc2',

... 'c1ccccc1',

... 'c1ccccc1',

... 'cc(=o)o',

... ]

>>> properties = [0.4, -1.5, 3.2, -0.2, 1.7]

>>> featurizer = dc.feat.circularfingerprint(size=1024)

>>> ecfp = featurizer.featurize(smiles)

>>> ecfp.shape

(5, 1024)

>>> dataset = dc.data.numpydataset(x=ecfp, y=np.array(properties))

>>> len(dataset)

5這裡我們使用circularfingerprint並轉換 smiles到ecfp。ecfp是指紋,它是由化學結構資訊組成的向量,我們可用它作為許多模型的輸入。然後,你可能有包含smiles和領儲如homo-lumo gap之類特徵的csv檔案。這種情況,通過使用dataloader,立即可以載入和特徵化資料。

>>> import pandas as pd

>>> # make a dataframe object for creating a csv file

>>> df = pd.dataframe(list(zip(smiles, properties)), columns=["smiles", "property"])

>>> import tempfile

>>> with dc.utils.universalnamedtemporaryfile(mode='w') as tmpfile:

... # dump the csv file

... df.to_csv(tmpfile.name)

... # initizalize the featurizer

... featurizer = dc.feat.circularfingerprint(size=1024)

... # initizalize the dataloader

... loader = dc.data.csvloader(["property"], feature_field="smiles",

featurizer=featurizer)

... # load and featurize the data from the csv file

... dataset = loader.create_dataset(tmpfile.name)

... len(dataset)

53.3.3分割器

dc.splits模組是科學分割器的集合。通常我們需要將原資料分割為訓練集,驗證集,測試集以除錯模型和評估模型的效能。我們將展示分割器的使用。

>>> splitter = dc.splits.randomsplitter()

>>> # split 5 datapoints in the ratio of train:valid:test = 3:1:1

>>> train_dataset, valid_dataset, test_dataset = splitter.train_valid_test_split(

... dataset=dataset, frac_train=0.6, frac_valid=0.2, frac_test=0.2

... )

>>> len(train_dataset)

3>>> len(valid_dataset)

1>>> len(test_dataset)

1這裡,我們用randomsplitter,將資料按訓練:驗證:測試=3:1:1的比例隨機分割。但是隨機分割有時會高估模型的效能,尤其是小型數中不平衡資料。請小心評估模型。

dc.splits提供很多方法和演算法來合適的評估模型的效能,如交叉驗證或使用分子拼接分割。

3.3.4模型訓練和評估

dc.models包含大量的科學應用模型。大部分模型繼承自dc.models.model,我們只需要通過呼叫fit方法來訓練模型。你不用關心使用具體的框架apis。我們將向您展示模型的用法。

>>> from sklearn.ensemble import randomforestregressor

>>> rf = randomforestregressor()

>>> model = dc.models.sklearnmodel(model=rf)

>>> # model training

>>> model.fit(train_dataset)

>>> valid_preds = model.predict(valid_dataset)

>>> valid_preds.shape

(1,)

>>> test_preds = model.predict(test_dataset)

>>> test_preds.shape

(1,)

這裡,我們使用sklearnmodel並訓練模型。即便你要使用tensorflow或pytorch深度學習模型,你只要呼叫fit方法。

然後,如果你使用dc.metrics.metric,你只要呼叫evaluate方法來評估模型。

>>> # initialze the metric

>>> metric = dc.metrics.metric(dc.metrics.mae_score)

>>> # evaluate the model

>>> train_score = model.evaluate(train_dataset, [metric])

>>> valid_score = model.evaluate(valid_dataset, [metric])

>>> test_score = model.evaluate(test_dataset, [metric])

第三章例3 3至例3 10

例3.4 給出三角形的三邊長,求三角形面積 例3.5 求ax 2 bx c 0方程的根.a,b,c由鍵盤輸入。b二次方 4ac 0 例3.6 用 f輸出實數,只能得到6位小數。例3.7 float型資料的有效數字 例3.8 先後輸出boy三個字元 方法一 方法二 例3.9 從鍵盤輸入boy 3個字元...

第三章 堆疊

1.基礎知識 堆疊可以實現很多的應用,遞迴的問題轉化成非遞迴形式,在本質上也是堆疊的問題.它是一種 filo 操作的資料結構,一般也有兩種儲存方式 陣列跟鍊錶實現形式,這裡我給出了鍊錶形式的堆疊模板,裡面包括了基本的堆疊所有的操作,還有兩個比較著名的應用例子,時間倉促,精力比較有限,關於迷宮老鼠還沒...

第三章 曙光

第三章 曙光 第二場校園招聘開始了。其實,洋對這個公司的不是很了解。因為前幾天突然在bbs上面看到了這個公司的招聘資訊,洋覺得這個公司不錯,就上網投了簡歷。接下來的乙個多小時,讓洋很震撼!想不到這個公司這個厲害,而且無論從哪方面來說,絕對不比之前的那個公司差。想不到自己的乙個不經意的決定到了這個大的...