본문 바로가기
  • 조금 느려도, 꾸준히
반응형

전체 글59

[Android] [Tip] SwipeRefreshLayout 스와이프 민감도 설정 보통 위로 스와이프 해서 새로고침을 구현하고 싶을 때 SwipeRefreshLayout 으로 RecyclerView 나 ListView 등을 감싸서 구현하게 되는데, 새로고침을 일으키는 스와이프 민감도가 너무 높다고 느껴질 때가 있다. 게시글들을 보려고 스크롤 했는데, 의도치 않게 새로고침이 되는 경우가 그렇다. 그럴땐 코드 한줄 만으로 민감도를 조정할 수 있다. SwipeRefreshLayout 의 mDistanceToTriggerSync 라는 변수가 있는데, 이는 새로고침 이벤트를 발생시키기 위해 스와이프 해야 하는 거리를 표현한다. 따라서 SwipeRefreshLayout의 setDistanceToTriggerSync() 라는 내장함수를 호출하여 조절하면 된다. 기본값은 120으로 설정된 것으로 알.. 2020. 7. 30.
첫번째 글 - UI UX 디자인 하며 느낀 점 1. Recycler View 의 Item 을 ConstraintLayout으로 설정하면 이슈가 생긴다(ex. 댓글 아이템이라 했을 때, 너비가 match parent 혹은 0dp 후 constraint left/ constraint right 을 parent 로 설정했음에도 불구하고 너비 적용이 잘 안되는 경우 발생) 2. CardView, FrameLayout은 하나의 Child만 가질 수 있다. (가령 CardView 안에 TextView 와 ImageView를 동시에 넣고 싶을 때, 먼저 Layout으로 감싼 후 그 안에 설정해 주면 해결된다.) 3. TextView의 Style 과 Size 등은 TextView 크기를 sp 단위로 설정했을 때 사용자 기기의 글자 크기, 글자 폰트로 자동으로 적용.. 2020. 7. 29.
목표를 향해 달려가다가, 힘들 때 그럴 때가 있다. 평소에 정신없이 일을 하고, 문제들을 해결하며 나 자신과의 도전에서 고군 분투 하다가, 가끔씩 정신이 들고 내가 무엇을 하고 있는지 내가 정말 나 자신이 행복할 수 있는 길을 가고 있는 것이 맞는지 문득 생각이 들 때가 있다. 나같은 경우는 가끔 밤에 여유가 될 때 혼자 집에서 술을 마시는 취미가 있는데, 취기도 취기지만, 생각의 범위가 넓어지면서, 내가 과연 행복한 삶을 살고 있는가, 그런 생각이 문득 든다. 이 글은 누군가에게 보이기 위함이 아닌 나 자신에게 쓴다 나는 현재 기회가 되어 스타트업을 꿈꾸는 멤버들과 함께 앱을 개발하고 있다. 지금껏 개발했던 프로젝트보다 규모가 큰 프로젝트였고, 아직 론칭을 하지 않았지만 한달이 조금 넘게 지난 지금 정말 빠르게 많은 것을 배웠고, 그만.. 2020. 7. 29.
[Colab / Keras] Avocado Price 예측 모델 만들기 2 # 데이터 전처리 신경망 모델을 학습시킬 때, 혹은 기계학습 기반의 인공지능 모델을 학습시킬 때 가장 중요한 것은 '좋은 데이터'를 인풋으로 제공하는 것이다. 이를 위해 여러 전처리 기법이 있고, 더 최적의 데이터 주입을 위해 다양한 머신러닝 알고리즘도 탄생했으며, 지금도 연구 중이다. 아보카도 데이터셋은 머신러닝 초보자 용으로 적합하기 때문에, 데이터 자체는 문제될 것이 없다. 다만 이를 어떻게 전처리하고, 가공해서 이용할 것이냐는 전적으로 사용자의 몫이다. # 데이터 시각화 데이터 전처리를 하고, 기계를 학습시켜 올바른 인과관계를 통한 추론을 얻으려면 데이터 간 관계도 파악해야 한다. 이때 적용할 수 있는 방법이 데이터를 시각화 하는 것이다. 가령 X라는 데이터와 Y라는 데이터의 상관관계를 분석하기 .. 2020. 4. 24.
[Colab / Keras] Avocado Price 예측 모델 만들기 1 #Avocado Data 캐글의 유명한 데이터셋. 한때 젊은 층 사이에서 열풍을 불렀던 주인공 아보카도의 가격을 예측하는 것을 목적으로 배포되는 데이터셋이다. 캐글 홈페이지에 들어가서, avocado 를 검색하면 최상단에 위치해 있고, 무료로 다운받을 수 있다. 필자는 다운받은 Avocado 데이터를 구글 드라이브에 올려놓고, 캐글에서 이용하기 위해 드라이브 마운트를 하여 Pandas 라이브러리를 이용해 데이터를 불러오는 작업을 거쳤다. 이제 막 머신러닝 공부를 시작했다면 복잡하지 않으면서 쉬운 방법이라고 생각한다. #Make Model 기본적으로 Keras를 이용해서 간단한 신경망을 구현하였고, 데이터의 전처리는 Scikit-Learn을 이용하였다. 모델을 구축하기 위해 필요한 라이브러리들을 impor.. 2020. 4. 24.
[Keras Deep Learning] 신경망 Tutorial # Why Keras? 필자는 이전까지 [핸즈온 머신러닝] 시리즈를 이어왔다. 핸즈온 머신러닝은 아주 유명하고 좋은 서적이나, 1판 기준으로는 2부 신경망/Deep learning 주제에서 Tensorflow 1 버전을 이용하기에, 트렌드에 뒤쳐진 측면이 있었다. Tensorflow 는 지난해 2.0 버전을 발표하면서 Keras를 주력 기반 프레임워크로 내세웠으며, Keras는 기존의 TF 1버전에 비해 초보자들도 사용하기 쉽고 간단한 문법으로 이루어져 있다. 따라서 일반 Machine Learning, 즉 핸즈온 머신러닝 시리즈에서 1부에 해당하는 부분은 핸즈온 머신러닝의 Scikit-Learn으로 진행하였고, 신경망/기타 다른 Deep Learning 에 대해서는 Keras를 이용하는 방향으로 연재를.. 2020. 4. 18.
Windows 에서 C++ 을 python처럼 사용하기 [jupyter C++ kernel] 필자는 육사에서 일반 대학으로 편입하게 되어 올해부터 수업을 듣게 되었다. 전공필수 이수 조건으로 인해 '자료구조' 수업을 다시 들어야 했는데, 새로운 대학에서는 자료구조 수업을 C++ 을 이용한다는 소식을 듣고 C++ 공부를 시작하게 되었다. 필자는 지금까지 대부분의 프로젝트와 수업을 java 나 python 으로 진행하였고, 육사에서 자료구조 수업을 들을 때도 python으로 진행했었다. python은 분명히 강력하고 좋은 언어이지만 메모리 관리, 비트 연산 , 시스템 프로그래밍 같은 하드웨어적인 부분을 공부하고 기본을 다지기엔 C 언어 계열을 이용하는 것이 더 적합하다는 판단을 했고, 이번 기회에 다른 언어, 특히 C와 같은 비교적 low level 의 고급 언어 (뭔가 역설적인 표현이지만) 를 공.. 2020. 3. 12.
핸즈온 머신러닝(8) - 앙상블 학습 # 앙상블 학습 - 머신러닝의 집단지능. 여러 분류기의 예측을 모아서 하나의 예측을 함 - 모든 분류기가 완벽하게 독립적일 때 최고의 성능을 발휘 -> 각각 다른 알고리즘으로 학습시키는 것이 좋음 - 같은 종류의 분류기가 같은 데이터로 학습하면 같은 종류의 오차를 만들기 쉽다. # 직접투표, 간접투표 직접 투표 분류기: 각 분류기의 예측을 모아서 가장 많이 선택된 클래스를 예측. (voting = 'hard') 간접 투표 분류기: 모든 분류기가 predict_proba() 메서드와 같이 클래스의 확률을 예측할 수 있는 경우 개별 분류기의 예측 확률을 평균하여 가장 높은 확률의 클래스를 예측. (voting = 'soft') # 배깅과 페이스팅 분류기를 같은 알고리즘을 사용하는 경우, 훈련 세트에서 서브셋.. 2020. 1. 29.
핸즈온 머신러닝(7) - 결정 트리 # Decision Tree - 분류와 회귀 작업, 다중 출력 작업 가능 - 매우 복잡한 데이터셋 학습 가능 - 랜덤 포레스트(Random Forest) 의 기본 구성 요소 # 학습과 시각화 사이킷런의 DecisionTreeClassifier 모듈을 통해 결정 트리 모델 학습 가능, Graphviz 를 통해 결정 트리 시각화 가능 예시) iris 데이터셋의 꽃잎 길이와 꽃잎 너비 데이터를 이용하여 클래스 분류하기 from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier iris = load_iris() X = iris.data[:, 2:] # petal length and width y = iris.targ.. 2020. 1. 28.
SVM - Quadratic Programming(QP) & Kernel Trick # 선형 SVM 분류 모형 가중치 벡터 $\mathrm{w}$ , 편향 $b$ 샘플 $\mathrm{x}$ 에 $\mathrm{w}$ 을 점곱하고 $b$ 를 더해 계산한 결과를 토대로 예측 $\hat{y}$ 를 구함 $$\mathrm{w}^T \cdot \mathrm{x} + b = w_1 x_1 + \cdots + w_n x_n + b $$ $$ \hat{y} = \begin{cases} 0 & \mathrm{w}^T \cdot \mathrm{x} + b = 0 \end{cases} $$ SVM 분류 모형은 제한된 마진 오류 내에서 가장 큰 마진을 갖는 $\mathrm{w}$ 와 $b$ 를 찾아야 한다. 이때 $\math.. 2020. 1. 27.
핸즈온 머신러닝(6) - 서포트 벡터 머신 2 # SVM 회귀 기존 분류에 적용: 일정한 마진 오류 안에서 두 클래스 간의 도로 폭이 가능한 한 최대가 되도록 함 회귀에 적용: 제한된마진 오류 안에서 도로 안에 가능한 한 많은 샘플이 들어가도록 함 -> 도로의 폭은 하이퍼파라미터 $\varepsilon$ 으로 조절 * 허용오차의 하이퍼파라미터와 다름. SVR과 LinearSVR에서 허옹오차는 tol, 도로의 폭은 epsilon 매개변수로 지정 from sklearn.svm import LinearSVR np.random.seed(42) m = 50 X = 2 * np.random.rand(m, 1) y = (4 + 3 * X + np.random.randn(m, 1)).ravel() svm_reg = LinearSVR(epsilon=1.5, rand.. 2020. 1. 27.
핸즈온 머신러닝(6) - 서포트 벡터 머신 1 Suppor Vector Machine - 매우 강력한 다목적 머신러닝 모델 (선형/비선형 분류, 회귀, 이상치 탐색 등) - 머신러닝에서 가장 인기 있는 모델 - 복잡한 분류 문제에 적합 - 소규모, 중간 규모의 데이터셋에 적합 # 선형 SVM 분류 예를 들어 두 가지 클래스를 구분하는 선형 SVM 분류기가 있다고 할 때, SVM 분류기의 결정 경계는 두 개의 클래스를 나누면서 제일 가까운 훈련 샘플로부터 가능한 한 멀리 떨어져 있으려 한다. 이러한 특성을 라지 마진 분류(large margin classification) 라고 함. 라지 마진 분류의 결정 경계는 결정 경계과 가장 가깝게 위치한 샘플에 의해 전적으로 결정된다( 즉 결정 경계와 비교적 먼 샘플은 아무런 영향을 미치지 못함). 이렇게 결정.. 2020. 1. 27.
반응형