GEO is a public functional genomics data repository supporting MIAME-compliant data submissions. Array- and sequence-based data are accepted. Tools are provided to help users query and download experiments and curated gene expression profiles.
간단하게 요악하면 GEO 사이트는 실험 데이터들을 공공 데이터베이스에 표준화된 포맷으로 저장하고자 하는 취지로 만들어졌습니다.
GEO 사이트를 알아내긴 했지만, 여기서 내가 원하는 데이터를 찾는 일은 또 다른 일이었습니다.
Cancer 키워드로 사이트를 1~2주 정도 뒤졌고 최종적으로 여러 가지 암에 대한 데이터셋을 4개 얻을 수 있었습니다.
처음에는 데이터셋 4개를 합춰보려고했습니다. 하지만, 정규화한 방법도 다르고 결정적으로 4개의 데이터셋이 2200개 정도는 같은 유전자에 대해서 값을 저장하고 있었으나, 약 4~500개의 서로 다른 유전자에 대해서 값을 저장하고 있기 때문에 데이터셋 4개를 합치려면 각 데이터셋의 20% 정도의 유전자 값들을 날려줘야 했습니다.
4개의 데이터셋을 합쳐도 되는지 안되는지 확인하기 위해, PCB 방법도 써보고 각 데이터셋 별로 데이터 분포도 확인해봤지만 결과가 다 애매하게 나와서 결국 제일 큰 데이터셋 하나만 가지고 학습을 진행했습니다.
4046명의 여성에 대한 혈청 MicroRNA 데이터로 총 2565개의 유전자에 대한 값들을 저장하고 있는 데이터입니다.
[데이터 전처리]
원본 데이터는 총 13개 클래스에 대한 데이터입니다.
하지만, 원본 데이터를 가지고 학습을 진행한 결과 '악성 난소 질환', '경계 난소 종양', '난소 관련 기타'가 모두 난소암으로 판단되는 것을 확인했고 '난소 질환' 이라는 하나의 클래스로 묶어주기 위해 난소암 클래스와 다른 모든 클래스에 대해서 SVM(서포트 벡터머신)을 이용해 이진 분류를 진행했습니다.
그 결과 다음과 같이 난소암은 다른 암들과는 90% 이상으로 분류가 되지만 '악성 난소 질환', '경계 난소 종양'만 이진 분류가 되지 않는 것을 확인했습니다.
다음과 같이 처음 dp[i][j] 에서 dp[i -1][j -1] / dp[i -1][j] / dp[i][j - 1] 이 0이 아니라 정사각형이 만들어지면 현재 만들어진 정사각형의 최대 길이를 dp[i][j]에 저장합니다.
3 x 3 크기의 정사각형은 다음과 같이 배열에 저장합니다.
물론, 한 곳이라도 0인 곳이 있으면 정사각형이 만들어지지 않으므로, 배열에 저장하지 않고 진행한다.
끝까지 진행해서 지금까지 만들어진 정사각형의 길이 중 가장 큰 값을 제곱해서 넓이를 출력한다.
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int map[1000][1000] = {};
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
string input;
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> input;
for (int j = 0; j < m; j++)
map[i][j] = int(input[j] - '0');
}
int ans = 0;
for (int j = 0; j < m; j++)
ans = max(ans, map[0][j]);
for (int i = 0; i < n; i++)
ans = max(ans, map[i][0]);
for (int i = 1; i < n; i++) {
for (int j = 1; j < m; j++) {
int t = min(map[i - 1][j - 1], min(map[i - 1][j], map[i][j - 1]));
if (t > 0 && map[i][j] > 0)
map[i][j] = t + 1;
ans = max(ans, map[i][j]);
}
}
cout << ans * ans;
}