NBME - 使用 DeBERTa 模型分析病人病例
這篇文章不會談論怎麼寫程式,而是著重在說明如何為 DeBERTa 模型設計 Input 和 Ouput 以及如何評估模型的表現。
說明
題目來源:https://www.kaggle.com/c/nbme-score-clinical-patient-notes
當你去看醫生時,醫生如何解讀你的症狀會決定診斷的準確性。醫生在獲得執照之前,已經有很多撰寫病人記錄的實踐經驗,這些記錄文檔包含病人的病史、體檢結果、可能的診斷和後續護理。學習和評估撰寫病人記錄的技能需要其他醫生的反饋,這是一個耗時的過程,可以通過機器學習來改進。
直到最近,Step 2 Clinical Skills(臨床技能)考試是美國醫學執照考試(USMLE)的一個組成部分。考試要求考生與標準化病人(被訓練來扮演特定臨床病例的人)互動,並撰寫病人記錄。訓練有素的醫師評分員會根據每個病例的重要概念(稱為特徵)用量表來評分病人記錄。病人記錄中包含的這些特徵越多,得分就越高(除了其他影響考試最終得分的因素)。簡單來說,就是考生要從病例中找出可能可以作為生病的特徵。
然而,讓醫生評分病人記錄考試需要大量時間和人力、財力資源。 ...
LeetCode #169 Majority Element - 刷題之旅
1 題目描述
給一個數組,存在一個數字超過半數,找出這個數。
這題有個特殊要求,就是要線性的時間複雜度,空間複雜度是O(1)。
因此難度會在空間複雜度如何滿足1的情況下,找出最佳解法。
2 解法
2.2 我的解法
一開始我沒看到有空間複雜度的限制,所以就很直接的使用了HashTable,把每個數字出現的次數記錄下來,最後找出最大的那個。
123456789101112131415161718class Solution(object): def majorityElement(self, nums): """ :type nums: List[int] :rtype: int """ num_dic = {} threshold = len(nums) / 2 # 計算每個數字出現的次數 for i in range(len(nums)): if num_dic.ge ...
LeetCode #13 Roman to Integer - 刷題之旅
題目來源:https://leetcode.com/problems/roman-to-integer/description/
1 題目描述
和上一題相反,將羅馬數字轉換成阿拉伯數字。
2 解法
2.1 我的作法
我一開始想的比較複雜,是想要使用while迴圈,從第一個字串與第二個字串開始比較,一般來說羅馬字是由大排到小,因此一但發現“前面” < "後面“ (由小到大),前面要當減數,否則就是加法。
大概是這種感覺:
123456789101112131415161718192021222324252627282930313233class Solution(object): def romanToInt(self, s): """ :type s: str :rtype: int """ num_dic = {'M': 1000, 'D': 500, 'C ...
LeetCode #12 Integer to Roman - 刷題之旅
題目來源:https://leetcode.com/problems/roman-to-integer/description/
1 題目描述
把數字轉換成羅馬數字,正常情況就是把每個字母相加,並且大字母在前,小字母在後,上邊也介紹了像 4 和 9 那些特殊情況。
2 解法
2.1 我的作法(無HashTable)
簡單粗暴些,把所有可能都列舉出來,包含1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1,然後一個一個去減,直到 num 為 0 為止。
大概是這種感覺:
123456789101112131415161718192021222324252627282930class Solution(object): def intToRoman(self, num): """ :type num: int :rtype: str """ arr = [(1000, 'M' ...
LeetCode #3 Longest Substring Without Repeating Characters - 刷題之旅
題目來源:https://leetcode.com/problems/longest-substring-without-repeating-characters/description/
1 題目描述
這道題目要求我們在給定的字符串 s 中找到不含重複字符的最長子字符串的長度。
2 解法
2.1 暴力解
簡單粗暴些,找一個最長子字串,那麼我們用兩個迴圈窮舉所有子串,然後再用一個函數判斷該子字串中有沒有重複的字元。
123456789101112131415161718192021222324252627def isUnique(s: str, start: int, end: int): """end 不包含""" substring = {} for i in range(start, end): if substring.get(s[i]): return False else: substring[s[i ...
LeetCode #1 Two Sum - 刷題之旅
1 題目描述
這是一道經典的 Two Sum 問題,要求從一個整數數組 nums 中找出兩個數字,使它們的和等於給定的目標值 target,並返回這兩個數字的索引。每個輸入保證有且只有一個解,且同一元素不能被重複使用。答案的返回順序可以是任意的。
2 解法
2.1 暴力解
簡單粗暴些,兩重循環,遍歷所有情況看相加是否等於目標和,如果符合直接輸出。
時間複雜度:O(n²)
空間複雜度:O(1)
12345678910111213public int[] twoSum(int[] nums, int target) { int []ans=new int[2]; for(int i=0;i<nums.length;i++){ for(int j=(i+1);j<nums.length;j++){ if(nums[i]+nums[j]==target){ ans[0]=i; ans[1]=j; ret ...
彙整medium上面 演算法學習之-Leetcode-破關總指南
前言
看到 演算法學習之-Leetcode-破關總指南我覺得整理的非常好,準備開始作為之後刷LeetCode的指南。
本篇的所有內容非出自於我手,而是整理自 演算法學習之-Leetcode-破關總指南 的文章,我只是將他們的文章整理成一篇,方便之後查閱。
正確心態
不要硬去挑戰難題然後又硬要自己想出來才肯罷休,這樣的學習效率會很差,甚至學不到重點反而歪掉。好好把握你能抓得住的那一部分就好,吃不下去的就先放寬心不要著急。你的大腦仍然會或多或少的在背景運作吸收,並在未來的某一天有需要的時候,讓你想起來好像曾經聽過那個什麼,跟現在這件事有點關聯,但記不清楚了,只要這時候再重新好好補上就很完美了。
自己挑題目最重要原則:寧可太簡單,不要太難,太簡單還可以緩步提升難度,太難有可能一下把自己的正循環打斷,拖延症就容易趁機發作而不想學習,得不償失。
也不用太強求要把每個資料結構理解到最底層去,有大致理解他們各種操作的時間複雜度特性後,就可以先往下一關邁進了。
刷題順序
挑一個關鍵字找教材、影片或上課直到完全弄懂做法與時間複雜度的分析
去 Leetcode 找相同關鍵字的 Easy 題或簡單的 M ...
LeetCode 課前預習 - 掌握 Hash Table 指南
如果你喜歡的我文章,希望你可以到我的 github 給我一個 star ⭐️ Blog Repo
1. 基本介紹
Hash Table 的日常應用
Hash Table(哈希表)是一種高效的數據結構,用於在平均時間複雜度 O(1) 的情況下進行查找、插入和刪除操作。這使得 Hash Table 在許多日常應用中得到了廣泛使用,最長薦的就是密碼的存儲在安全應用中,Hash Table 可以用來存儲密碼的哈希值,從而保護用戶密碼的安全。其他狀況還有:
緩存(Cache):在網頁瀏覽器或數據庫中,Hash Table 用於實現緩存機制,快速檢索和存儲最近使用或最常用的數據。
數據庫索引:許多數據庫使用 Hash Table 來實現索引結構,以提高查詢速度。
Hash 的重要基本特性
不可逆(Irreversible):這是密碼學中的一個重要特性,Hash 函數是一種單向函數,無法通過哈希值反推原始密碼,儲存在資料庫的密碼通常是已經hash過後,使得沒有人知道原本的密碼長什麼樣子,除非用暴力破解,找到一組字串經過hash得到與原始密碼hash過後相同的值,通常是發生碰撞或是真的猜到密碼 ...
Pytest - Python 單元測試 教學
TL;DR
Test-Driven Design的作者 Kent-Beck說過 “Write tests until fear is transformed into boredom.”
在進行重構時,每次最害怕的莫過於改了一個地方,其他地方就壞掉了。這時候,單元測試就是你的好幫手。你可以透過點擊一下按鈕,就能知道你的程式碼是否有問題。以前都寫java的單元測試,現在開始學習機器學習的相關領域,覺得也要培養寫測試的習慣。
Pytest vs Unittest
Ref: 熱門 Python 測試框架: Pytest & Unittest 的差異
Ref: Pytest vs. Unittest: Which Is Better?
以 Python 後端來說,眾多測試框架裡最熱門的當屬下面兩者:
第三方 Pytest
Pytest 不需要把測試的 function 封裝在類別(class)之中,你可以更加自由地定義你的測試案例
e.g. 不需要放unittest.TestCase class TestAddition(unittest.TestCase)
僅僅需要在 ...
Windows - Tensorflow GPU Setup 手把手教你於Tensorflow上啟用GPU
Introduction
這邊主要是教如何在Tensorflow上使用GPU,網路上有很多安裝教學,但是當你按照官方教學依序安裝,最終發現還是沒有成功,但霧沙沙的安裝了以下內容:
CUDA 11.2 或是更高的版本
CUDA Toolkit 11.2 或是更高的版本
TensorFlow 直接安裝最新版本(沒選版本號)
你發現執行以下程式碼時卻列印出0,那麼這篇文章就是你需要的。
12import tensorflow as tfprint("Num GPUs Available: ", len(tf.config.list_physical_devices('GPU'))) # Num GPUs Available: 0
通常遇到這個問題的主要原因是:
安裝的CUDA版本不對,一定要去看官方指定的版本確認當前使用Tensorflow的版本所對應的Python版本、CUDA版本和cuDNN版本
若安裝的Tensorflow版本不對,也會導致GPU無法使用
Prerequisite
Anoconda 在開始前先確保安裝好Anocon ...