Ubuntu 14.04 이전 GUI로 변경 / VMware Unity 활성화



10.04의 버전을 사용 하다가 갑자기 14.04로 변경하면 너무 확 바뀌어 버린 GUI 때문에 적응이 쉽지 않다.

가장 치명적인 단점은 VMware 11 버전 까지도 Unity mode를 Ubuntu 14.04에서는 지원하지 않는 다는 것이다.


Guest OS로써 Ubuntu를 사용하는 필자로썬 답답한 상황이다.



Classic Gnome 으로 돌아가자!



sudo apt-get update 

sudo apt-get install gnome-session-flashback



GUI 변경 방법은


1) Logout


2) 발바닥 클릭


3) Metacity 클릭


compiz 와 metacity의 차이점


compiz는 3D 콤포넌트를 지원하고 metacity는 2D로 구성된다고 한다.

하지만, metacity만 VMware Unity가 지원 되므로 이것을 선택 하자.



Auto-Login 재설정


Classic gnome을 설치하고도 문제점은 auto-login시 Default 설정이 바뀌지 않아서 예전 GUI 환경으로 들어간다는 것이다. 

Default 환경을 수정해 주자.


기본적으로 Auto-login은 lightdm을 사용한다고 가정 한다.


sudo vi /etc/lightdm/lightdm.conf


user-session="원하는 환경"


각각의 종류

For unity-2d the session file is called ubuntu-2d.desktop

For gnome-classic the session file is called gnome-classic.desktop

For gnome-classic (no effects) aka gnome-fallback the session file is called gnome-fallback.desktop

For unity-3d the session file is called ubuntu.desktop

For Lubuntu the session file is called Lubuntu.desktop

For LXDE the session file is called LXDE.desktop


우리 같은경우 gnome classic 이므로, 아래 두개중 하나로 추가 하면 된다.

user-session=gnome-classic

user-session=gnome-flashback


최정 설정 결과



최종적으로 재부팅 하면 정상적으로 classic gnome으로 auto-login 되는것을 볼 수 있다.



더 알아보기: Classic gnome 재설치를 통해서 Ubuntu 14.04에서 VMware Unity Mode 사용하기 




참고 자료


[1] How to install the gnome classic Desktop in Ubuntu 14.04

[2] How do I change the default session for when using auto-logins?




[Week 2] Programming with R


If



기본적인 제어문이다.

if(<condition>) {

     ## do something

} else {

     ## do something else

}



if(<condition1>) {

     ## do something

} else if(<condition2>) {

     ## do something different

} else {

     ## do something different

}


else는 없어도 된다. 


 


for / while



for(i in 1:10) {

 print(i)

}


This loop takes the i variable and in each iteration of the loop gives it values 1,2,3, ... , 10, and then exits.


These three loops have the same behavior.


x <- c("a", "b", "c", "d")

for(i in 1:4) {

     print(x[i])

}


for(i in seq_along(x)) {

     print(x[i])

}


for(letter in x) {

     print(letter)

}


for(i in 1:4) print(x[i])


z <- 5


while(z >= 3 && z <= 10) {

     print(z)

     coin <- rbinom(1, 1, 0.5)


     if(coin == 1) { ## random walk

     z <- z + 1

 } else {

     z <- z - 1

 }

}



Repeat


break를 써야만 중단할 수 있는 무한 루프를 생성 하게 된다.


The loop in the previous slide is a bit dangerous because there's no guarantee it will stop.

Better to set a hard limit on the number of iterations (e.g. using a for loop) and then report whether convergence was achieved or not.



Next

해당 iteration을 무시함.



Return

만나는 즉시 해당 function에서 나오게 된다.

그리고 주어진 값을 반환 한다.




Functions



기본적인 예제





Functions are created using the function() directive and are stored as R objects just like anything else.

In particular, they are R objects of class "function".


f <- function (<arguments>) {

## Do something interesting

}


Functions in R are "first class objects", which means that they can be treated much like any other R object. 

Importantly,

Functions can be passed as arguments to other functions

Functions can be nested, so that you can define a function inside of another function The return value of a function is the last expression in the function body to be evaluated.



Argument Matching

You can mix positional matching with matching by name. When an argument is matched by name, it is "taken out" of the argument list and the remaining unnamed arguments are atched in the order that they are listed in the function definition.

Most of the time, named arguments are useful on the command line when you have a long argument list and you want to use the 



Lazy Evaluation

Arguments to functions are evaluated lazily, so they are evaluated only as needed.


f<- function (a,b)

{ a^2 }

f(2)


두번째 인자를 사용하지 않아도 에러가 발생하지 않는다.

실제로 b를 사용하지 않기 때문이다.


f <- function (a,b) {

print (a)

print (b)

}

f(45)


[1] 45

Error: Argument "b" is missing, with no default


lazy evaluation의 의미는 위에서 보는것과 같이 최대한 error check을 뒤로 미뤄서 한다는 것에 있다.



The "..." Argument

The ... argument indicate a variable number of arguments that are usually passed on to other functions.

... is often used when extending another function and you don't want to copy the entire argument list of the original function.


myplot <- function (x, y, type = "1", ...) {

plot(x, y, type = type, ...)

}


Generic functions use ... so that extra arguments can be passed to methods (more on this later).


> mean

function (x, ...)

UseMethod("mean")




Scoping Rules


The scoping rules for R are the main feature that make it different from the original S language.


The scoping rules determine how a value is associated with a free variable in a function

R uses lexical scoping or static scoping. A common alternative is dynamic scoping.

Related to the scoping rules is how R uses the search list to bind a value to a symbol

Lexical scoping turns out to be particularly useful for simplifying statistical computations



Free variable의 정의

이것은 formal argument 가 아니다.

이것은 local variable이 아니다.



Lexical Scoping



Exploring a Function Closure



Lexical vs. Dynamic Scoping



함수 f에서 y와 함수 g는 free 변수 이다.

함수 G에서는 y가 free variable 이다.


With lexical scoping the value of y in the function g is looked up in the environment in which the function was defined, 

in this case the global environment, so the value of y is 10.


With dynamic scoping, the value of y is looked up in the environment from which the function was called 

(sometimes referred to as the calling environment).

- In R the calling environment is known as the parent frame


So the value of y would be 2.



When a function is defined in the global environment and is subsequently called from the global environment, then the defining environment and the calling environment are the same. This can sometimes give the appearance of dynamic scoping.





Coding Standards


1. Always use text files / text editor

2. Indent your code

3. Limit the width of your code (80 columns?)

4. Limit the length of individual functions


아래는 들여쓰기 공간을 4로 준것이고, 배경도 다크로 변경한 것이다.

[tool] -> [global options]




Dates and Times in R


R has developed a special representation of dates and times

Dates are represented by the Date class

Times are represented by the POSIXct or the POSIXlt class

Dates are stored internally as the number of days since 1970-01-01

Times are stored internally as the number of seconds since 1970-01-01


There are a number of generic functions that work on dates and times

weekdays: give the day of the week

months: give the month name

quarters: give the quarter number (“Q1”, “Q2”, “Q3”, or “Q4”)







Quiz 02


10문제이고 풀이는 첨부 파일과 같다.


Quize 2 week (answer).pdf





Programming Assignment 1: Air Pollution


처음한 프로그래밍 과제


제출 방식이 R script를 이용한다.

아래와 같이 정상적으로 업로드 할경우 완료되는 것을 볼 수 있다.

 













'MOOC > R Programming' 카테고리의 다른 글

Certificate & Comment  (0) 2015.08.26
[4 Week] Str & Simulation & R Profiler  (0) 2015.07.30
[3 Week] Loop Functions & Debugging Tools  (1) 2015.07.24
[1 Week] Getting stated and R Nuts and Bolts  (0) 2015.07.08

Android Studio 자동 import 기능


단축키: Optimize imports CTRL + ALT + O

File -> Settings -> Editor -> General -> Auto Import -> Java and make the following changes:




이 두기능을 체크하면 자동으로 import가 진행 됨.



'Computer Science > Android Application' 카테고리의 다른 글

Android Plot Libraries  (0) 2016.01.22
Android wear app  (0) 2015.08.25
Android Wear 개발환경 구축  (0) 2015.07.15
Notifications API Guide  (0) 2015.06.29
Android Studio 특징 및 단축키  (0) 2015.05.24

Ubuntu keyboard shortcuts (단축키)  변경


search -> keyboard -> shortcuts



Android Wear 개발환경 구축


Smart-Phone과 연결하기


아래명령어를 통해서 Watch Emulator와 연결 시켜 준다.


USB connection을 Phone과 Desktop이 연결되지 않고도 Watch Emulator와 연결하고 싶다면,

아래와 같이phone의 adb daemon port를 설정 한다음 연결 한다.


$ adb tcpip 5555

$ adb connect IP주소:5555

$ adb -s IP주소:5555 forward tcp:5601 tcp:5601



Watch Emulator는 그룸 모양의 icon이 사라지게 된다.




스마트폰에서 Notification을 발생 시킨다. 




정상적으로 Watch emulator로 전달 되는것을 볼 수 있다.








'Computer Science > Android Application' 카테고리의 다른 글

Android wear app  (0) 2015.08.25
Android Studio 자동 import 기능  (0) 2015.07.15
Notifications API Guide  (0) 2015.06.29
Android Studio 특징 및 단축키  (0) 2015.05.24
다중 스크린 사이즈를 지원하는 방법  (0) 2014.10.27

기계학습을 구현하기 위해서 어떤 언어가 좋은가?


원제: Best Programming Language for Machine Learning


아래는 기계학습을 위해서 사람들이 선택한 언어를 나타낸다.




We ran a brief analysis on the tools Kagglers used and wanted to share the results.  The open source package R was a clear favorite, with 543 of the 1714 users listing their tools including it.  Matlab came in second with 218 users.  The graph shows the tools that at least 20 users listed in their profile.


Machine Learning Languages


MATLAB/Octave

깊이 있게 내부를 구현해보고 싶을때 사용할 수 있는 언어이다.

matrix 연산에 특화된 도구이다.

R

statistical analysis에 특화된 언어이다.

machine learning 알고리즘도 많이 구현 되어있다.

확장성도 용이하다.


Python

NumPY로 MATLAB과 같은 행렬 연산 가능

SciPy로 machine learning 알고리즘 구현 가능


Java-family / C-family

여기에는 강건한 라이브러리르 들이 많이 있다.

Weka(java), LibSVM(C++) 등이 하나의 예이다.

성능관점에도 C는 유용하다.





Programming Languages for Machine Learning Implementations

Speed

python과 java 같은 경우 garbage collection이 문제이다.


Programming Ease

매우 주관적인 부분이지만 그래도 차이는 존재 한다.

1) Syntax: 일반언어처럼 자연스러우며 간결해야 한다. 

2) Library support: linear algebra, graphics, IO 등과 같은 라이브러리를 효율적으로 제공 해줘야 한다.

3) Built in Functionality: 자료구조, module 등을 의미 한다.

4) Scalability: 

5) Familiarity


The existing significantly used machine learning code bases seem to favor lower level languages.

  1. Weka is one of the best known general purpose machine learning toolkits. It is implemented in Java and has far more algorithmic coverage than any other system I know of.
  2. LibSVM is implemented in C++ and Java.
  3. SVMlight is implemented in C.
  4. C4.5 is implemented in C.
  5. SNNS is written in C.







'AI > Theory' 카테고리의 다른 글

Ensemble Method  (0) 2015.09.15
Active Learning  (0) 2015.08.19
순차데이터 분석을 위한 Hidden Markov Model (HMM)  (0) 2015.06.08
Anomaly Detection  (0) 2015.06.07
Unsupervised Learning: Cluster Analysis  (3) 2015.06.03


Five Features of a Good Topic Sentence



1. It should guide the whole paragraph.

A well-written topic sentence controls or guides the whole paragraph. It lets the reader know what the rest of the paragraph will be about.


2. It should not be a well-known fact.

A good topic sentence is not a general fact that everyone accepts as true. For example, Cars use gasoline is not a good topic sentence because there is not much more to say about the topic.


3. It needs to be specific

A good topic sentence is specific. SUVs are useful is not a good topic sentence because it is too general. The reader does not know exactly what to expect in the paragraph. SUVs are useful to parents with three or more children is a good topic sentence because it is specific. It gives a reason why SUVs are useful for whom.


4. It cannot be too specific

A good topic sentence is not too specific. An SUV can hold up to six adults limits the topic. the supporting details have already been stated. 


5. It must contain a controlling idea.

A good topic sentence has a controlling idea a group of words or a phrase that helps guide the flow of ideas in the paragraph: A compact car is the best car for a small family. The underlined words in this sentence are the controlling idea.




Supporting Sentence


Think of supporting sentences as helpers for the topic sentence. They describe, explain, clarify, or give examples of the main idea in the topic sentence. Supporting sentences support and explain the topic. They answer questions such as Who? What? When? Where? Why? and How? They explain the topic sentence in greater detail and give the reader more information.


Each paragraph that you write must have enough supporting details to make the main idea clear to the reader. Like wise, a good writer make sure that each supporting sentence is related to the topic sentence and its controlling idea. 


The writer can use the following:

1) fact

2) example

3) quotation

4) statistics 




Concluding Sentences



A concluding sentence concludes, or wraps up, a paragraph. It lets the reader know that you have finished talking about the idea introduced by the topic sentence.


Features of a Concluding Sentence

A concluding sentence has three main features:

1) It is usually the last sentence of a paragraph.

2) It lets the reader know that the paragraph has ended.

3) It brings the paragraph to a logical conclusion by:

a. Restating the main idea of the topic sentence.

 Look at the concluding sentence in Example Paragraph 1,








Samba 이용한 공유 디렉터리 만들기


samba 관련 패키지들을 설치

sudo apt-get install samba system-config-samba gksu -y





[1 Week] Getting stated and R Nuts and Bolts



Overview and History of R


History


R is a dialect of the S language.

S is a language that was developed by John Chambers and others at Bell Labs.

S was initiated in 1976 as an internal statistical analysis environment - originally implemented as Fortran libraries.


R

1991: Created in New Zealand by Ross Ihaka and Robert Gentleman. Their experience

developing R is documented in a 1996 JCGS paper.

1993: First announcement of R to the public.

1995: Martin Mächler convinces Ross and Robert to use the GNU General Public License to

make R free software.

1996: A public mailing list is created (R-help and R-devel)

1997: The R Core Group is formed (containing some people associated with S-PLUS). The core

group controls the source code for R.

2000: R version 1.0.0 is released.

2013: R version 3.0.2 is released on December 2013.


Features of R

Syntax is very similar to S, making it easy for S-PLUS users to switch over.

Semantics are superficially similar to S, but in reality are quite different (more on that later).

Runs on almost any standard computing platform/OS (even on the PlayStation 3)

Frequent releases (annual + bugfix releases); active development.

·


Quite lean, as far as software goes; functionality is divided into modular packages

Graphics capabilities very sophisticated and better than most stat packages.

Useful for interactive work, but contains a powerful programming language for developing new

tools (user -> programmer)

Very active and vibrant user community; R-help and R-devel mailing lists and Stack Overflow

It's free !



R Data Types: Objects and Attributes


모든것은 Object 

5개의 기본적인 object가 존재한다.


character

numeric (real numbers)

integer

complex

logical (True / False) 


Vector ()

 A vector can only contain objects of the same class


List () 

can contain objects of different classes ( 서로다른 타입의 object를 포함하는 vector )



Numbers

Real number

to specify the L suffix. Ex: entering 1 gives a numerix object; entering 1L explicitly give you an integer.


the value NaN represents an undefined value ("not a number"); e.g. 0 / 0; NaN can also be thought of as a missing value (more on that later)



Attributes

R objects can have attributes

names, dimnames

dimensions (e.g. matrices, arrays)

class

length

other user-defined attributes/metadata




Data Types - Vectors and Lists



Creating Vectors

The c() function can be used to create vectors of objects.

x <- c(0.5, 0.6) ## numeric


using the vector() function

x <- vector ("numeric", length = 10)

x

[1] 0 0 0 0 0 0 0 0 



Data Types - Matrices 


Matrices are vectors with a dimension attribute. The dimension attribute is itself an integer vector of length 2 (nrow, ncol)




Matrices can also be created directly from vectors by adding a dimension attribute.




Matrices can be created by column-binding or row-binding with cbind() and rbind().





Data Types - Factors


Factors are used to represent categorical data. Factors can be un-ordered or ordered. One can think of a factor as an integer vector where each integer has a label.

  • Factors are treated specially by modelling functions like lm() and glm()
  • Using factors with labels is better than using integers because factors are self-describing; having a variable that has values "Male" and "Female" is better than a variable that has values 1 and 2.



The order of the levels can be set using the levels argument to factors().

This can be important in linear modeling because the first level is used as the baseline level.




Data type - Missing Values


NaN은 na를 포함하지만

na는 NaN을 포함하지 않는다.


na나 NaN이나 모두 test object를 위해서 사용 된다.

가끔 Excel 파일을 읽어 들이면 NaN들이 많이 있는 것을 볼 수도 있다.





Data Types - Frame


가장 중요한 key data 타입중 하나이다.

Data frames are used to store tabular data

  • They are represented as a special type of list where every element of the list has to have the same length
  • Each element of the list can be thought of as a column and the length of each element of the list is the number of rows
  • Unlike matrices, data frames can store different classes of objects in each column (just like lists); matrices must have every element be the same class
  • Data frames also have a special attribute called row.names
  • Data frames are usually created by calling read.table() or read.csv()
  • Can be converted to a matrix by calling data.matrix()



Removing NA Values 


A common task is o remove missing values (NAS)


> x <- c(1, 2, NA, 4, NA, 5)

> bad <- is.na(x)

> x[!bad]


[1] 1 2 4 5


여러개의 백터가 있을 때 그중에서 no missing value들의 subset을 구하고 싶다면?

complete.cases (x, y)


Description

Return a logical vector indicating which cases are complete, i.e., have no missing values.





airquality [good, ] 로 할경우 모든 row가 다 출력됨.



ma.omit()

NA 값을 가지고 있는 모든 행을 삭제 한다.



Quiz 01


20문제이고 풀이는 첨부 파일과 같다.


Quize 1 week (result2).pdf









'MOOC > R Programming' 카테고리의 다른 글

Certificate & Comment  (0) 2015.08.26
[4 Week] Str & Simulation & R Profiler  (0) 2015.07.30
[3 Week] Loop Functions & Debugging Tools  (1) 2015.07.24
[2 Week] Programming with R  (0) 2015.07.16

1.2. Nouns: plurals, countable versus uncountable



irregular plurals


axis / axes

analysis / analyses

criterion / criteria

lemma / lemmata

optimum / optima

phenomenon / phenomena

vertex / vertices


1.3 단수인데 s로 끝나는것


주제를 설명 할때

Economics, electronics, mathematics, physics, politics, statistics


Means는 plural of mean (i.e. average)

하지만 방벅으로 쓰일 때는 a means of transport가 가능 하다.


News는 셀수없다.

diabetes, mumps, pus 의학 용어들도 셀수 없다.


Species는 singular도 되고 plural도 된다.



Economics is one of the most popular subjects amongst students in our university.


Statistics is a distinct mathematical science, rather than a branch.


It is not clear where these statistics come from.




1. Introduction


What is Machine Learning ?


Arthur Samuel이 정의한 Machine Learning 이란 ?

"the field of study that gives computers the ability to learn without being explicitly programmed."


Mitchel은 좀더 현대적 개념으로 정의 했다.

"A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improve with experience E."


예: playing checkers


E = the experience of playing many games of checkers

T = the task of playing checkers

P = the probability that the program will win the next game.



Supervised Learning


입력에 대한 정확한 출력을 아는 여러 데이터가 존재 한다.

이러한 입력과 출력의 관계속에서 그것을 규정하는 함수 F를 찾는것이다.


supervised learning은 크게 2가지 그룹으로 규정되는데, 첫번째는 "regression"이고 두 번째는 "classification"이다.


Regression의 경우 연속적인 출력에서 어떠한 결과를 예측 할 때 사용 한다. 따라서 규정되는 함수 F는 연속함수 이다.


Classification의 경우 이산출력 (discrete output)을 예측하는 것을 말한다. 이것은 불연속적인 특정 카테고리를 예측하는 함수 F로 규정 된다.


예: 크기에 따른 집값 예측

크기와 집 가격의 관계는 연속적이다. 이러한 문제는 연속적인 출력을 나타내므로 regression이라고 할 수 있다.


예: 요구되는 가격보다 집을 높은 가격에 팔지 아니면 낮은 가격에 팔지에 대한 문제

두 가지 결정에대해서 구분하는 것이므로 classification 문제이다.


Unsupervised Learning


해당 방법은 예측에 대한 어떠한 피드백도 없다. 즉 데이터에 애초에 정확한 출력값이 존재하지 않는 상황이다.

따라서 Clustering을 통해서 데이터들간의 특징을 파악하는 것이다.


Clustering과 Associative에 대해서 각각 예는 아래와 같다.


Clustering: 미국 경제에 관한 1000개의 에세이가 있다고 하자. 이러한 에세이를 여러 기준으로 그룹화 할 수 있다.

즉, 단어의 빈도, 문장의 길이, 페이지 양 등과 같은 것들이다.


Associative: 환자의 특징과 질병과의 관계 같은 것이 예이다. 즉 환자의 증상, 가족 병력, 물리적 신체 특성, mental outlook.

이런 정보들의 관계를 분석해서 어떠한 환자 특성과 질병간의 mapping function을 고안 할 수 있다.



2. Linear Regression with One Variable


Model Representation


Linear regression with one variable is known as "univariate linear regression."

univariate는 하나의 입력으로 하나의 출력을 예측하고 싶을때 사용 한다.


The hypothesis Function


일반적인 hypothesis function의 모습은:


$h_{ \theta  }(x)=\theta_0+\theta_xx$


이다.

위 hypothesis 함수는 결국 x라는 입력에 대해서 가장 신뢰할만한 y를 생성하는 함수인 것이다.

이러한 출력값은 $\theta_0$와 $\theta_1$에 의해서 결정 된다.


어떻게 생성하는지 알아보자.


예:


그냥 대충 만들면 $h_\theta$ 함수는: $h_\theta(x)=2+2x$ 라고 하자.

이러면, 입력 1에 대해서 해당 hypothesis 함수를 이용해서 y를 예측하면 4가 되고 이것은 3만큼 오차를 가지는 것을 알 수 있다.

이러한 오차가 가장 적은 hypothesis를 찾아내는 것이 핵심이다.



Cost Function


생성한 hypothesis 함수의 정확도를 측정하기 위한 함수 이다.

hypothesis에 의해서 만들어진 결과와 실제 결과값 같은 차이에 대한 평균으로 보통 많이 잡는다.


$J(\theta_0,\theta_1)=\frac {1}{2m} \sum _{i=1}^{m}{(h_\theta(x^{(i)})-y^{(i)})^2  }$


위와 같은 함수를 보통 "Squared error function" 또는 Mean squared error 라고 한다.


제곱과 $\frac{1}{2m} $하는 이유는 미분을 통한 하강 기울기(gradient descent) 계산을 쉽게 하기 위함이다.



Gradient Descent


cost function을 통해서 생성한 hypothesis 함수의 정확도를 평가할 수 있게 됬다.

이제는 이러한 hypothesis 함수를 자동으로 개선하는 방법을 익혀야 한다.


가장 대표적인 함수 최적화 방법으로 gradient descent 방법이 존재 한다. 이것은 local minimum을 찾아내는 방법이다.

이때 최적화는 learning rate라고 불리우는 $\alpha$에 의해서 이뤄진다.


기본적인 수식은 아래와 같다.


$\theta _{ j }:=\theta _{ j }-\alpha \frac { \partial  }{\partial\theta_j  } {J(\theta_0,\theta_1)}$


이것을 직관적으로 이해하면 다음과 같다.


$\theta _{ j }:=\theta _{ j }-\alpha$[slope of tangent aka derivative]






'MOOC > Machine Learning (python)' 카테고리의 다른 글

Week 01 Linear Algebra Review  (0) 2015.12.17
Week 01: Parameter Learning  (0) 2015.12.06
Week 01: Model And Cost Function  (0) 2015.12.05
Week 08: Dimensionality Reduction  (0) 2015.11.18
Week 03: Logistic Regression Regularization  (0) 2015.08.03

각종 옵션들



  1. <pre class="brush:html"> <!-- HTML 소스표시 -->
  2. <pre class="brush:css"> <!-- CSS 소스표시 -->
  3. <pre class="brush:js"> <!-- JavaScript 소스표시 -->
  4. <pre class="brush:html highlight:[2,4]"> <!-- 특정 행 강조 -->
  5. <pre class="brush:js html-script:true"> <!-- 다른 언어와 HTML -->
  6. <pre class="brush:html first-line:25"> <!-- 시작 행 번호 변경 -->
  7. <pre class="brush:html toolbar:false"> <!-- 도구모음 숨기기 -->
  8. <pre class="brush:html auto-links:false"> <!-- 오토 링크 해제 -->
  9. <pre class="brush:html" title="Blomari Note"> <!-- 제목 표시 -->


테마 변경



  1. <link rel="stylesheet" type="text/css" href="./images/shCoreDefault.css" />

테마 레퍼런스 사이트


shCore 와 shTeme의 차이점

shCore가 주변 테두리 없이 변경되어서 좋음.



언어 종류



  1. SyntaxHighlighter.autoloader(
  2. 'applescript ./images/shBrushAppleScript.js',
  3. 'actionscript3 as3 ./images/shBrushAS3.js',
  4. 'bash shell ./images/shBrushBash.js',
  5. 'coldfusion cf ./images/shBrushColdFusion.js',
  6. 'cpp c ./images/shBrushCpp.js',
  7. 'c# c-sharp csharp ./images/shBrushCSharp.js',
  8. 'css ./images/shBrushCss.js',
  9. 'delphi pascal ./images/shBrushDelphi.js',
  10. 'diff patch pas ./images/shBrushDiff.js',
  11. 'erl erlang ./images/shBrushErlang.js',
  12. 'groovy ./images/shBrushGroovy.js',
  13. 'java ./images/shBrushJava.js',
  14. 'jfx javafx ./images/shBrushJavaFX.js',
  15. 'js jscript javascript ./images/shBrushJScript.js',
  16. 'perl pl ./images/shBrushPerl.js',
  17. 'php ./images/shBrushPhp.js',
  18. 'text plain ./images/shBrushPlain.js',
  19. 'py python ./images/shBrushPython.js',
  20. 'ruby rails ror rb ./images/shBrushRuby.js',
  21. 'sass scss ./images/shBrushSass.js',
  22. 'scala ./images/shBrushScala.js',
  23. 'sql ./images/shBrushSql.js',
  24. 'vb vbnet ./images/shBrushVb.js',
  25. 'xml xhtml xslt html ./images/shBrushXml.js'
  26. );


사용방법


<pre class="brush: 언어이름;">

/* 코드 */

</pre>



<script type="syntaxhighlighter" class ="brush: 언어이름">

/* */

</script>




참고 사이트


http://alexgorbatchev.com/SyntaxHighlighter/manual/demo/

http://blomari.tistory.com/54



'일상 > 정보 수집' 카테고리의 다른 글

markdown 사용법  (0) 2016.03.25
[Highlight.js] Tistory 소스코드 하이라이트  (0) 2015.09.30
원격  (0) 2013.11.20
소스코드 하이라이트  (0) 2013.06.04
원격 데스크탑 설정 가이드 라인  (0) 2013.01.11



Support Library version 4를 이용해서 호환을 함.


NotificationCompat.Builder



5.0 material design의 영향으로 해당 버전에서는 약간 다르다.



Creating a Notification


NotificationCompat.Builder

NotificiationCOmpat.Builder.build() => notification object


NotificationManager.notify() // notification object will be passed to the system by calling that function.



Required notification contents


setSmallIcon() // A small icon 

setContentTitle() // a title

setContentText() // Detail text


그밖에도 많은 options들이 API를 보면 나와 있다.


Notification actions


하나 이상의 action은 반드시 정의 되어함.

특정 activity로 이동하는 action을 의미한다.


두개 이상의 action을 수행하기 위해서는 4.1 이상이 되어야함.

snoozing alarm 또는 send a text 등과 같은 것들이다.


PendingIntent

setContentIntent()


Notification Priority


priority를 통해서 notification이 언제 어떻게 보일지를 설정 할 수 있다.


NotificationCompat.Builder.setPriority()

PRIORITY_MIN (-2)

PRIORITY_MAX (2)

PRIORITY_DEFAULT (0)



Creating a simple notification


눌렀을 때 어떤 activity가 실행 되는 간단한 코드는 아래와 같다.

TaskStackBuilder는 간단히 PendingIntent를 생성 하는 것이다.


NotificationCompat.Builder mBuilder =
       
new NotificationCompat.Builder(this)
       
.setSmallIcon(R.drawable.notification_icon)
       
.setContentTitle("My notification")
       
.setContentText("Hello World!");

// Creates an explicit intent for an Activity in your app
Intent resultIntent = new Intent(this, ResultActivity.class);

// The stack builder object will contain an artificial back stack for the
// started Activity.
// This ensures that navigating backward from the Activity leads out of
// your application to the Home screen.
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);

// Adds the back stack for the Intent (but not the Intent itself)
stackBuilder
.addParentStack(ResultActivity.class);

// Adds the Intent that starts the Activity to the top of the stack
stackBuilder
.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
        stackBuilder
.getPendingIntent(
           
0,
           
PendingIntent.FLAG_UPDATE_CURRENT
       
);
mBuilder
.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
   
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// mId allows you to update the notification later on.
mNotificationManager.notify(mId, mBuilder.build());


1) 간단히 object를 생성

2) 눌렀을 때 시작되는 intent를 생성

3) Back forward 했을때 문제를 막기 위해서 home screen을 보장하는 intent를 생성

4) 시스템에 등록

5) notify를 통해서 최종적으로 시스템에 등록



Applying an expanded layout to a notification

4.1 이상에서만 지원



Handling Compatibility

파편화로 인해서 당연히 이러한 부분도 고려를 해야함.



Managing Notifications 

When you need to issue a notification multiple times for the same type of event, you should avoid making a completely new notification.
Instead, you should consider updating a previous notification, either by changing some of its values or by adding to it, or both.

-> updating notifications

-> removing notifications



Preserving Navigation when Starting an Activity







Notification priority



MAX 긴급하고 타임 크리티컬 하다. 지속적으로 계속 해결해야하는 테스크일때 사용 
HIGH 중요한 커뮤니케이셔이다. 메시지나 채팅 메시지 같은 것이다. 중요한 것들이라면 heads-up display를 만들어 내게 된다.
Default: 어디에도 속하지 않을 때 기본적으로 사용함.
LOW 그냥 보기는 원하지는 급하진 않은것들.
거의 bottom list에만 출력하게 된다.
MIN 날씨 정보나 상황 정보 같은 것드이다. status bar에 보이지 않는다. 
status bar를 펼쳐야 보이게 된다.

Notification  Manager에서 각각에 따라서 행동을 정의해서 동작해 주는것 같다.
이미 어느정도 고려하는 부분이 있는 것이다.





Chapter 8: Punctuation



한글에서는 그다지 많이 없는 puctuation(구두법)은 영어에서는 매우 중요한 요소이다.



Fonts and Formatting



plain, italic, bold 정도만 사용한다.

Times Roman / Cambria
Sans-serif font -> Calibri (widely used in advertising and to some readers don't seem sufficiently serious).

그 밖에 폰트를 다양하게 한 문서에 사용하는 것은 어리석은 짓이다.


Stops (마침표)



end of sentence에서 stop을 사용하는 것 외에도 Abbreviation 이나 acronyms 또는 ellipses에서 stop은 사용된다.

이때 stop을 두번 사용해서는 안된다. 둘 중 하나를 포기 해야 한다.


(x) The process required less than a second (except when the machine was heavily loaded, the network was saturated, etc.).

(o) The process required less than a second (unless, for example, the machine was heavily loaded or the network was saturated).


Heading에도 사용하지 않는다.

(x) 3. Neural Nets for Image Classification.

(o) 3. Neural Nets for Image Classification



Commas



콤마의 사용은

1) pauses

2) correct parsing

3) form lists

4) phrase 즉 삽입어구 (parenthetical remark) // 이때 qualifier (한정사) 로써의 의미는 아니다.


삽입 어구로써 pair comma의 누락은 자주 발생 되는 에러이다.

(x) The process may be waiting for a signal, or even if processing input, may be delayed by network interrupts.

(o) The process may be waiting for a signal, or, even if processing input, may be delayed by network interrupts.


최소한의 comma 사용은 ambiguity를 줄이는 방법이다. 하지만 너무 생략 해서는 안된다.

(x) When using disk tree algorithm were found to b particularly poor.

(o) When using disk, tree algorithm were found to be particularly poor.


(x) One node was allocated for each of states, but of the nine seven were not used.

(o) One node was allocated for each of the states, but, of the nine, seven were not used.

(o) Nine nodes were allocated, one for each of the states, but seven were not used.


list를 나열할때 맨 마지막 comma를 생략하지만, 생략하지 말아야 한다.

(x) At this stage, the alternatives were to branch to the left, back up one step and branch to right, insert a new value or increment the failure counter and exit with error.

(o) At this stage, the alternatives were to branch to the left, back up one step and branch to the right, insert a new value, or increment the failure counter and exit with error.


comma는 독자에게 숨쉴 시간을 주게 된다.

(x) As illustrated by the technique listed at the end of the section there are recent advances in parallel algorithms and multiprocessor hardware that indicate the possibility of optimal use of shared disk arrays by indexing algorithms such as those of interest here.


(o) As illustrated by the techniques listed at the end of the section

recent advances in parallel algorithms and multiprocessor hardware may allow optimal use of shared disk arrays by some algorithms, including indexing algorithms such as those of interest here.


위와 같이 여러개의 sentence로 나누는 것은 독자에게 문장의 이해력을 돕는다.



Colons and Semicolons



join related statements.

(o) These small additional structures allow a large saving: the worst case is reduced from O(n) to O(log n)


to introduce lists.

(o) There are three phases: accumulation of distinct symbols, construction of the tree, and the compression itself.


더 작은 엘리먼트 요소를 설명 할때는 semicolon을 사용한다. 그리고 semicolon이후의 문장들은 comma 또는 다른 mark들로 분할 할 수 있다.

(o) There are three phases: accumulation of distinct symbols in a hash table; construction of the tree, using a temporary array to hold the symbols for sorting; and the compression itself.


semicolon은 새로운 긴 문장을 쪼개거나, 강조를 위해서 새로운 part로써 문장을 시작 하기 위해서도 사용 된다.

(o) In theory the algorithm would be more efficient with an array; but in practice a tree is preferable.



Apostrophes


전문 writer들도 실수 하지만, rule은 quite simple 하다.


Singular possessives 

the student's algorithm

Plural possessives 

students' passwords

Pronoun possessives

사용하지 않는다. its, hers 그냥 그대로 사용

Contraction (생략)

it's // can't 

하지만 technical writing에서는 절대로 apostrophe를 사용하면 안된다.

구어적인 표현이다.



Exclamations



한 문장에 하나만 써야 한다.

technical writing에서는 사용하지 않는다.

정말로 놀라울때는 쓸 수 도 있지만, 거의 안쓴다.


(o) Performance deteriorated after addition of resources !

하지만, 부사를 통해서 충분히 exclamation을 대신할 수 있다.

(o) Remarkably, performance deteriorated after addition of resources.



Hyphenation


compound word를 표현할 때 사용함.

web-site 하지만, website도 일반적임. 하나의 글에서 일관성을 지키면 된다.


문장 길이의 일관성을 위해서 auto hyphenation을 사용할 수도 있지만, 일반적이진 않다.



Capitalization


Heading을 작성할 때 사용 한다. 

두 가지 전략이 존재 한다.


Minimally capitalized 

The use of jump statements: Advice for Prolog programmers


Maximally capitalized

The Use of Jump Statements: Advice for Prolog Programmers



Quotations


남의 말을 인용할때 사용한다. 쓸때 없이 사용하면 지루해 진다.

(o) Crosley (2000) argues that "open sets are of insufficient power", but Davies (2002) disagrees: "If a concept is interesting, open sets can express it."


stop을 quotation 밖에 위치 시킨다.

(x) One of the reserved words in C is "for."

(o) One of the reserved words in C Is "for"


하지만, quotation을 사용하는 대신에 새로운 폰트를 사용하는것도 방법이다.

One of the reserved words in C is for.



Parentheses (괄호)


parenthetical statement는 없어도 문장이 형성 되는데 전혀 문제가 없는것 처럼 

전체 문장에 끼워져 있어야 한다.

(x) Most quantities are small (but there are exceptions.)

(o) Most quantities are small (but there are exceptions).

(x) (Note that outlying points have been omitted).

(o) (Note that outlying points have been omitted.)


하지만 역시 parentheses 또한 아에 안쓰는게 좋다. 쓰면 쓸 수록 지저분해 보인다.



Citations


(x) In [2] such cases are shown to b rare.

(x) In (Wilson 1984) such cases are shown to be rare.

둘다 안된다. bracketed expression을 마치 명사처럼 쓰는것은 금지 된다.


올바른 표현들

Such cases have been shown to be rare [2].

Such cases have been shown to be rare (Wilson 1984).

Wilson [2] has shown that such cases are rare.

Wilson has shown that such cases are rare [2].

Wilson (1984) has shown that such cases are rare.


















'논문 작성 > Writing for computer science' 카테고리의 다른 글

Ch08: puctuation(2)  (0) 2016.12.25
Chapter 7 Style Specifics  (0) 2015.03.05
Chapter 1-6  (0) 2015.02.17

R에서 EPS 이미지 생성


EPS 이미지로 저장하는 방법을 다루겠다.


postscript(file="plot.eps", onefile=FALSE, horizontal=FALSE)


dev.off()



If you are using ggplot2 to generate a figure, then a ggsave(file="name.eps") will also work

'AI > R ggplot2' 카테고리의 다른 글

CDF stat_ecdf  (0) 2016.12.21
ggplot2: 그래픽 라이브러리  (0) 2016.03.20
ggplot2 package를 이용한 Graph 그리기  (0) 2015.02.16
R 그래프 페키지 종류  (0) 2014.11.05

EndNote에서 BibTex 가져오기 (import)


실제적으로 EndNote에서 bibtex 포멧을 가져오는 것을 지원 하지는 않는다.


Endnote 파일을 bibtex으로 export하느 기능은 지원 하지만 말이다.



http://sydney.edu.au/engineering/it/~tapted/bib2endnote.html


위 사이트에서 bib2endnote.jar라는 파일을 지원 하는데


이것을 이용하면 bibtex을 xml로 변경할 수 있다.



1. 실행 명령어




2. GUI 화면을 볼 수 있다.



3. bibtex 파일을 open 한다음

4. xml 파일로 저장하면 끝이다.

5. 그다음 Endnote에서 해당 파일을 불러 오자.

'논문 작성 > EndNote' 카테고리의 다른 글

EndNote x7 사용방법 정리  (0) 2014.03.16

순차데이터 분석을 위한 Hidden Markov Model (HMM)



분석에 사용되는 feature들이 시간적 특성을 지닌다.

e.g., 지진파, 음성, 주식 거래량, 온라인 필기 문자 등


이러한 데이터를 sequential data 또는 context-dependent data라고 부른다.




시간성의 없는 데이터 선후 관계를 바꿔도 아무런 의미 변화가 없다.





시간성이 있는 데이터의 경우 선후 관계가 매우 중요해서

그것을 변경하면 새로운 결과가 나오게 된다.





HMM을 배우기 전에 기본적으로 Markov model이 무엇인지 부터 보자.


러시아 수학자 Andrey Markov 제안

시간 t에서의 관측은 가장 최근 r개 관측에만 의존한다는 가정 하의 확률 추론




예제

최근 4일간의 날씨 정보를 가지고 오늘 날씨를 추론하는것을 생각해 보자.


해 해 해 비 

1차 마코브 모델을 사용하면 어제의 날씨 변화만 오늘에 영향을 미치므로 아래와 같이 4가지 경우가 모두 같게 된다.





1차 마커브 모델을 표로 표현하면 아래와 같다.


오늘 비 였을때 내일 {비,구름,해}의 확률을 모두 합하면 1이 되야한다. 계산해 보면 1이 된다.

하지만, 내일 {비}라고해서 오늘 {비,구름,해}일 확률의 합이 1은 아니다. '역'의 관계에서는 어떠한 시간적 의미도 없기 때문이다.


여기서 2차 마코브 모델을 고려한다고 생각해보자.

선후 관계가 있으므로 순서가 있는 경우다. 즉 순열이며

{비,비,비}와 같은 중복을 허용한다.

따라서 2차 마코브 일때의 경우의 수는 아래와 같다.





위 표를 이용해서 3x3 matrix를 생성한다. 이것을 이용해서 마크브 모데의 상태전이도를 만들게 된다.



아래와 같은 조건을 만족 한다.



마코브 모델을 이용해서 무엇을 할 수 있을 까?


관측백터 x를 구할 수 있게 된다.


P(x|마코브 모델) = P(x|A)라는 식이 나온다.

여기서 마코브 모델을 나타내는 A는결국 joint probability가 되므로


마크모델 A와 관측 벡터 O간의 독립이면 P(O|A) = P(O)로 기술 할 수 있다.

그리고 joint probability가 갑자기 3->4로 넘어갈때 간단해 지는데 이러한 이유는

DAG 그래프 형태로, 즉 노드가 바로 직전의 부모에만 의존적인 베이시안 네트워크 구조를 가지기 때문이다.

즉 우리가 가정한 마코브는 1차원 바코브기 때문에 조인트 확률이 바로 직전의 노드에만 의존적이므로 뒷 부분을 모두 다 날려 버릴 수 있게 된다.



1차 마코브라도 계산을 위해서는 초기 확률이 필요하다.

초기 확률은 해가 되기위한 "파이3" 이다

곱의 확률이기 때문에 확률이 너무 적게 된다.





히든 마코브와 그냥 마코브와의 근본적인 차이점.


- 마코브 모델은 상태를 나타내는 노드에 관측 (비,해,구름) 그 자체가 들어 있다. 즉 상태를 볼 수 있다.

- HMM에서는 상태를 볼수 없게 했다. 즉 상태를 은닉 하게 된다.



동기


r차 마크브에서는 m^r (m-1)개의 매개변수가 생성 된다.

차수에 따라 모델의 크기가 너무 크게 증가 한다.


HMM

- 차수를 미리 고정하지 않고 모델 자체가 확률 프로세스에 따라 적응적으로 정함

- 따라서 아무리 먼 과거의 관측도 현재에 영향을 미침

- 즉 P(해 |비,비), P(해 | 비,비,비) , P(해,비,비,...,비) 모든 것에 따라서 확률 값이 다르게 된다. 즉 특정 어떤 차수에 고정적이지 않다.

- 이런 뛰어난 능력에도 불구하고 모델의 크기는 감당할 정도 이다.


비결

- 상태를 감추자





상태를 가지는 대신에 모든 노드가 모든 상태를 가질 수 있는 확률을 가지게 된다.


이용방법

예를 들어서 고나측 데이터로써 해->해->비->구름 이렇게 4일간의 관측 데이터가 존재한다고 하자.


그냥 마코브 모델을 사용한다면, 저러한 상태 전이는

s3 -> s3 -> S1 -> s2가 된다.


하지만 HMM의 경우

모든 상태에서 {비,해,구름}이 관측이 가능 하므로 가능한 시퀀스가 여러개 존재한다.

상태가 3개이니

3*3*3*3 의 경우의 수가 나온다.

3^4 = 81


이중에서 하나만 골라서 계산해 보면 

s3-> s3 -> s1 -> s2




HMM의 예제 (1) 


n개의 항아리에 공의 색깔 m개가 존재함

이러한 구성이 아래의 그림처럼

항아리 3개이고 공의 색깔은 4개이다.





이제 관측 백터에 대한 확률을 하나를 구해보자.


모델이 학습을 통해서 위와 같이 생성 되었다면,


관측 백터 O가 {진파, 연파, 검, 흰}이고

상태전이가 s1->s1->s1->s1 일때의 확률을 구하라





구하면 위와 같다.


그러면, 관측 백터 O가 {진파, 연파, 검, 흰} 나올 확률은 어떻게 구할까?


상태가 3개이고 4단계 이므로 나오는 확률의 경우의 수는 3^4 즉 81개이다.


이 81개의 확률을 모두 더해주면 관측 백터 O의 확률이 된다.


더하기다. 즉 그냥 Markov 모델은 곱하기인데, HMM은 더하기로 연산이 된다. 당연히 확률이 클 수 밖에 없다.




HMM의 예제 (2) 


여자친구의 삶 [Wikipedia]


-여자 친구의 일상을 관찰, V={산책, 쇼핑, 청소}

- 날씨는 {해,비} 2가지 상태 존재

- 수집한 정보는 아래와 같다.




답할 수 있는 문제

- 그녀가 일주일 연속으로 쇼핑만 할 확률은 ? (평가문제)

- { 산책, 산책, 청소 } 이렇게 했다면, 3일동안 날씨는 각각 어떠했는가 ? (디코딩 문제)

- { 산책, 산책, 청소} 했다면 오늘과 내일은 무엇을 할까? {복합적인 문제}




HMM의 구성요소와 세가지 문제


- 모델을 알고 있을 때 확률을 추론하라.(평가)

- 어느 것이 상태인가? 상태는 몇가지 인가? (아키텍쳐 설계)

- 확률 분포는 어떻게 구하나? (학습)


아키텍쳐 설계

HMM은 통상 가중치 방향 그래프로 표현 한다.

노드가 상태가 된다.

상태로 사용할 것이 명확한 경우도 있지만 그렇지 않은 경우도 있다.



대표적인 아키텍처

어고딕 모델과 좌우 모델

응용의 특성에 따라 적절한 아키텍처 선택이 중요

예를들어 음성인식은 좌우 모델이 좋다.




세개의 변수 결정

- 상태전이 확률 행렬 구성

- 관측 행렬 구성

- 초기 확률 백터 구성



세가지 문제점


평가: 모델 A가 주어졌을 때 관측 백터 O를 얻었을 때의 확률 P(O|A)는?

디코딩: 모델 A가 주어진 상화에서, 관측 벡터 O를 얻었을 때 최적의 상태열은 ? 역으로 가는 형태이다.

학습: 훈련집합을 가지고 모델 A를 도출 하는 과정이다.




HMM으로 Classficiation을 하는 방법은


Class 라벨마다 HMM을 생성해서 가장 높은 값을 가지는 Class 라벨로 prediction 하는 방법이 있다.



세가지 문제점에 적용 가능한 방법


평가: 동적 프로그래밍 이용

디코딩: 동적 프로그래밍 이용 (Viterbi 알고리즘)

학습: EM 알고리즘 (Baum-Welch 알고리즘)



평가: 동적 프로그래밍 이용


계산은 할 수 있어도

만약 관측 백터가 시퀀스 4이고 상태가 2이라면 (여자친구의 생활 패턴 문제)


2^4 = 16개를 계산 해야한다.


이것을 일반화 하면

상태수 n 관축 백터 O의 길이 T에 대해서


n의 t제곱 * t가 된다. 마지막 T는 더하기 연산 때문에 발생



동적 프로그래밍을 통한 중복 계산의 제거




















'AI > Theory' 카테고리의 다른 글

Active Learning  (0) 2015.08.19
기계학습을 구현하기 위해서 어떤 언어가 좋은가?  (0) 2015.07.11
Anomaly Detection  (0) 2015.06.07
Unsupervised Learning: Cluster Analysis  (3) 2015.06.03
Deep Learning  (0) 2015.06.03

Anomaly Detection




비정상적인 데이터를 찾는 문제이다.


응용분야는

신용카드 사기, 전화 사기, 네트웍 침입, Fault Detection 등이 있다.



Challenge

얼마나 많은 outlier를 찾을 것인가?

unsupervised이므로 찾기가 어렵다.


가정

정상저인 데이터가 비정상보다 확연하게 더 많다.



Types of anomaly detection schemes

- model based or statistical approaches

- distance based

- Density based



1) model based or statistical approaches

일단 모델을 생성하던가 어떤 잘 알려진 분포를 따라야 한다.


normal distribution과 같이 특정 파라메터로 분포를 설명 할 수 있어야 한다.

이럴때 outlier란 결국 probability가 낮은 분포에 속하는 데이터가 된다.



아래와 같은 분포인 Gaussian distribution이 많이 사용된다.

파라메터는 mean과 standard deviation이다.

위는 PDF로

N(0,1)의 값을 나타낸다.

2차원 PDF를 나타내므로, 결국 원래 값은 1차원 분포인 것이다. 변수가 x 하나이다.


Statistical 접근법의 한계점

Attribute가 1개이다. 대부분

데이터 분포가 잘알려진 분포를 따르기가 쉽지 않다.

고차원 데이터 분포에서는 적용하기가 쉽지 않다.




2) Distance based approach


멀리 떨어지면 아웃라이어
k-nearest neighbor를 쓸 수 있다.
장점: 간단
단점:
복잡도 O(m^2)
m by m matrix를 생성 해야 내기 때문이다.

k와 같은 파라메터에 너무 민감함
하나의 분포에서 밀도가 매우 다양하게 분포되어 있다면 잘 동작하지 않는다.
즉, 같은 데이터 분포안에서 특정 점들음 엄청 밀도가 높고 특정 점들은 밀도는 낮지만 어쨋든 모여있다면 명백히 두 점들의 분포는 각각의 클러스터를 생성할 수 있게 되어야 한다. 이렇게 같은 분포 안에서 밀도가 서로 다르게 나타나지면 밀도가 낮은쪽은 몽땅다 아웃라이러로 처리 되어 진다.

5개로 설정하면 일단 C는 아웃라이어 처럼 보인다.


하지만 문제는 1개로 줄여 버리면 c가 아웃라이러로 판별되지 않는다.

즉, K에 너무 민감하다.



k를 너무 높여도 문제가 발생 한다.



밀도가 서로 다를때가 문제가 심하다.


C는 아웃라이어다.


하지만 D와 A는 아웃라이로 검출하지 못한다.

전체적인 거리만 따질것이 아니라, 자신 주위의 밀도도 같이 고려 해야 한다.




- Density based approach



neighbor 안에 드는 모든 node들에 대한 distance의 평균을 구한 다음

그것의 역수를 취해서 density를 계산하여 outlier를 판별 한다.


한계점은 역시나 서로다른 밀도로 섞여 있는 경우 적합하지 않다.



- Improved density based approach

주변의 이웃들도 같이 밀도를 고려 하는 방법이다.




relative density에 역수를 취해서 outlier를 검출 하는데 사용 한다.


위 식의 의미는 아래와 같다.

N = 3이라고하면


나와 내 이웃 3개와의 Density의 평균 / 나의 이웃 3개 들의 Density 평균


이렇게 되면 이 값이 크다는 의미는  나의 덴시티가 내 이웃들의 덴시티 보다 크기 때문에 나는 더더욱 아웃라이어이지 않을 확률이 높다는 것이다.

작다는 의미는 내 덴시티보다 이웃들의 덴시티가 더 크니 위에서 발견못한 D같은 point를 아웃라이어로 판별 할수 있다.

따라서 저 값을 역수로써 사용하면 anomaly detection의 지표로 사용 할 수 있다.




3) Density based LOF Approach 


Local Outlier Factor (LOF)





Outliers in Lower Dimensional Projection


고차원에서는 빈공간도 너무 많고, proximity의 개념 자체가 잘동작 하지 않는다.

따라서 대부분의 point들이 outlier로 판별되는 문제가 존재 한다.


이것을 방지하기 위해서 Lower dimensional projection을 수행 해야 한다.








Unsupervised Learning: Cluster Analysis



데이터들의 분포에서 어떠한 그룹을 찾는 것이 cluster Analysis 이다.


대표적인 Unsupervised learning 방법이다. 정답을 모르는 상태에서 데이터들의 분포를 가지고 그룹을 결정 하기 때문이다.




위와 같이 그룹을 생성 했을때 Cluster안에서의 각각의 Data들 사이의 거리는 작아야한다. 즉 조밀한 배치를 이루고 있어야 한다.


Cluster들간의 거리는 최대한 먼 상태가 좋은 것이다.




기본적인 Clustering의 종류는 다음과 같이 나뉜다.


1) Partitional Clustering

각각의 그룹이 overlapping 되어지지 않고 정확히 하나의 그룹으로 구성되는 형태를 의미한다.





2) Hierarchical Clustering

계층적인 트리 형태로 구성되는 것을 말하며 그룹이 중첩되서 클러스터를 이루는 형태를 말한다.





Clustering Algorithms: K-means and its variants


가장 기본적인 Clustering 알고리즘이다.


초기 K를 정해서 각각의 초기 중심을 잡는다.

각각의 초기 중심을 기점으로 흩어져있는 데이터들중에서 가장 가까운 것을 그 중심을 기준으로한 클러스터에 편입 시킨다.

각각의 클러스터에대한 중심을 새로 계산 한다.


모든 중심이 변하지 않을때까지 반복한다.

하지만 어떤 경우에서는 끝나지 않을 수도 있다. 

따라서 몇 %이상 변하지 않을 때 까지나, SSE를 계산해서 변화량을 볼수도 있고

iteration 횟수를 고정해서 줄 수도 있다.



특성은 아래와 같다.

partitional clustering approach: 정확히 하나의 그룹에만 들어가지는 형태이다. 오버랩핑 되지 않는다.

Each cluster is associated with a centroid (or center point)

Each point is assigned to the cluster with the closest centroid

Number of clusters, K, must be specified 

The basic algorithm is very simple


- Complexity O(n*K*I*d)

n: number of points

K: number of clusters

I: number of iterations

d: number of attributes


- 어려운점

K값을 알기가 어렵다.

distance measure에 너무 민감하게 작용 한다.

초기 값의 선택이 매우 중요 한다.



결국 K-means cluster의 성능은 초기 center point의 선택으로 좌우 하는데,

성능 측정 지표가 있어야 계속 중심 포인트를 변경해 가면서 테스트를 수해할 수 있다.


제안된 성능 측정 방식은




Sum of Squared Error (SSE) 

방법이다.


아중 시크마의 의미는 아래와 같다


만약 K가 3이라고 가정하자.

즉 3개의 클러스터로 분할하고 싶어서 3이라고 준것이다.


각각의 클러스터에서의 중심 즉 평균과 각각의 데이터 포인트들간의 distance를 계산해서 제곱한다음 합을 구해주게 된다.





이렇게 해서 다 더하기 때문에 위와 같은 더블 시크마 공식이 나오게 된다.


이렇게해서 구한 SEE를 가지고 초기 seed를 변경해 가면서 

더 좋은 cluster를 찾을 수 있게 된다.


하지만 SSE measure의 한계점도 존재한다.

이것은 Intra개념만을 포함한 수치이다.

즉 클러스터들 간의 거리는 고려하지 않았다. inter 개념이 빠졌기 때문에

SSE가 최적의 k-means cluster를 찾는 가장 좋은 measure 라고 할 수 없다.




초기 중앙 점을 찾는 문제


  • 여러번 수행한다.

  • 계층적 클러스터를 구성해서 시각적으로 분석한 다음 적절히 K를 설정한다.

  • 의도적으로 더 많은 K를 설정한 다음 이중에서 적절히 초기 K를 선택한다. 즉 가장 넓게 분할되는 K를 선택 하는 거이다.

  • Bisecting K-means 알고리즘을 수행 한다. Not as susceptible to initialization issues


Bisecting K-means



하나의 클러스터에서 출발해서 반복하는 숫자만큼 클러스터를 분할하는 방법이다.

bisection에서 가장 작은 SSE를 가지는 2개의 클러스터를 list of clusters로 추가한다.


이 작업을 cluster 리스트가 K 클러스터를 포함할 때 까지 반복 하게 된다.


아래는 Bisecting K-means를 수행 했을 때의 그림이다.



기본적인 K-means algorithm의 문제는 바로 empty cluster의 생성 이다.

즉 클러스터를 계속 생성하는데, 가장 가까운 data가 하나도 없는 경우가 과정중에 자주 발생한다.

이때 어떻게 처리할 것인가?


해결방법

가장 멀리있는 포인트로 새로 시작

가장 높은 SSE로 새로 출발

동시에 몇개의 empty cluster가 발생하면 위가정을 몇번 더 반복 한다.


한번에 하나씩만 Center들을 업데이트 하는 방법. 시간이 오래걸리지만 empty는 생성되지 않는다.




Limitations of K-means



1) Differing Size 문제


크기가 서로 다른 클러스터를 만들어야 할 때 그렇게 하지 못하고,

큰것을 분할하는 성향이 강하다.




2) Differing Density




각각의 클러스터가 밀도가 서로 다르다면 문제가 또 발생 한다.



3) Non-Globular Shapes



구형태를 추구하는것이 K-means Algorithm의 특징이다. 

하지만 구형태가 아니라면 문제가 발생 한다. 


극복방법: 많이 쪼개서 합치는 방법이다. 아래와 같이








Hierarchical Clustering



중첩된 클러스터들로 구성된 계층적인 트리를 생성 한다.

시각적으로 볼 수 있는 특징이 있다.


생성하면 아래와 같은 모습을 볼 수 있다.

이러한 시각적인 모습을 통해서 적절히 클러스터를 생성 할 수 있다.

따라서 K를 설정할 필요가 없게 된다.


2가지 종류의 전략


Agglomerative:

Start with the points as individual clusters

At each step, merge the closest pair of clusters until only one cluster (or k clusters) left

단, 하나의 cluster가 남을 때 까지 이 방법을 반복 한다.


Divisive:

Start with one, all-inclusive cluster

At each step, split a cluster until each cluster contains a point (or there are k clusters)



Distance 또는 similarity matrix를 사용해서 clustering 과정을 수행 하게 된다.




클러스터를 합칠 때 어떻게 클러스터들간의 Similarity를 계산 할 수 있을까?


  • MIN

  • MAX

  • Group Average

  • Distance Between Centroids

  • Other methods driven by an objective function

object function means that an measure such as SSE



각각의 방법을 그림으로 표현하면 아래와 같다.





예제


Min (single llinkage)으로 계산해 보자.


5개의 point data에 대해서 similarity를 모두 계산한다.

min이니 가장 가까운 것을 합치게 된다.

similarity 가 1이면 가장 높은것을 의미 한다.


1 v 2 : 3 (0.1 or 0.7)

1 v 2 : 4 (0.65 or 0.6)

1 v 2 : 5 (0.2 or 0.5)



 

1 v 2

 1 v 2

 1

0.7

0.65 

0.5 

 3

0.7 

 1

0.4

0.3 

 4

0.65 

 0.4

0.8 

 5

 0.5

 0.3

 0.8



1 v 2 : 4 v 5 (0.65 or 0.5)

1,2,4,5의 경우 조합의 수는 총 4가지 이다. 왜 이것을 고려 하지 않을까? 이유는 둘중 가장 Similarity가 큰 것을 골랐기 때문에 나온 결과 2개중 하나만 고르게되면 이미 그것이 Similarity가 가장 큰것이 된다.


3 : 4 v 5 (0.4 or 0.3)

4 v 5 4 v 5 (0.8 or 1)


 

1 v 2

4 v 5

 1 v 2

 1

0.7

0.65 

 3

0.7 

 1

0.4

 4 v 5

0.65 

 0.4




 

1 v 2 v 3

4 v 5

 1 v 2 v 3

 1

0.65 

 4 v 5

0.65 





 

1 v 2 v 3 v 4 v 5

 1 v 2 v 3 v 4 v 5

 1



최종적으로 Min 방식인 둘 사이의 유사도가 가장 큰것을 합치는 방식으로 했을 때의

계층적 트리는 아래와 같다.




Max(Complete linkage) 방식
두개의 similarity 중에서 더 유사도가 적은것 즉 값이 작은것을 선택하는 방식이다.
하지만, 항상 병합은 가장 가까운 것들 끼리 한다는것을 염두 해야한다.
선택이 필요할때는 덜 유사한 거리가 가장 먼 것을 선택하지만 일단 병합은 가장 가까운 것들 끼리 하게 된다.



 

1 v 2

3

 1 v 2

 1 0.1 0.6 0.2

3

 0.1 1 0.4 0.3

 4

 0.6 0.4 1 0.8

 5

 0.2 0.3 0.81


 

1 v 2 

3

4v5 

 1 v 2 

 1

 0.1

 0.2

3

 0.1

 1

 0.3

 4 v 5

 0.2 0.3 1


  1v2

 3v4v5

 1v2 1 0.1
 3v4v5 0.11



Group average 방식



Clustering의 각각의 특징

MIN 방식의 강점과 약점
강점: 구 모양이 아닌것에 강하다.
단점: noise에 민감하다.


MAX 방식의 강점과 약점

강점: noise에 덜 민감하다.

단점: 큰 클러스터를 쪼개는 성향이 있다. 구 모양을 선호하는 경향이 있다.





Group Average

아래와 같은 데이터가 있을때






그룹 방식의 경우 위와 같이 계산 된다.

이중에서 결국 0.26이 가장 distance 값이 작기 때문에 이렇게 합쳐지게 된다.


장점: noise와 outlier에 민감하지 않다.
단점: 구형태의 구조를 지향한다.




계층적 클러스터의 시간과 공간 관점에서의 요구사항


O(N^2)의 공간 복잡도를 가진다. proximity matrix을 생성해야 하기 때문이다.

O(N^3) 시간 복잡도를 가진다. 많은 경우에 있어서
일단 n번 수행 해야 된다.
왜냐하면 하나하나 합쳐야하니 n번 수행 해야한다.

그다음 n^2의 매트릭을 매번 업데이트 해야 한다.
사실 이건 매트릭이 매번 줄어 들기 때문에 실제로는 N^2까지는 아니다.
upper limitation의 개념이라고 할 수 있다.

추가로 특별한 자료구조를 사용할 경우 복잡도는 더 줄어 든다.





계층적 클러스터의 문제점과 한계


계산과 공간 면에서 비싸다.


한번 결정한것을 되돌리기 어렵다.

노이즈와 아웃라이어에 민감하다.

큰 클러스터를 쪼개는 경향이 있다.


그래서 결국 어느정도 계층적 알고리즘을 초반에 돌리고 그다음 부터는

K-means로 돌리는것이 좋을 수 있다.

하나만 절대적으로 쓰지않고 복합적으로 쓰는 방법이다.







Divisive Hierarchical Clustering

큰것에서 작은것으로 쪼개는 방식이다.


MST를 생성한다음 쪼개면서 수행하게 된다.



Density-based Clustering 

밀도가 가장 낮은 영역에 의해서 두개의 밀도가 높은 영역으로 분할되는 클러스터링을 말한다.


DBSCAN 이 대표적인 알고리즘이다.

Density는 EPS즉 어떤 radius 안에 있는 point들의 수를 말한다.

core point를 결정하는 것이 중요한데

이것은 EPS 안에 특정 최소한의 포인트의 개수보다 더 높은 포인트들이 있을때 이것을 결정하는 EPS를 코어라 한다.


border point는 특정 포인트 개수 보다는 적지만 코어 포인트의 이웃일때를 의미한다.

noise 포인트의 경우 코어도 아니고 border도 아닐 때를 의미 한다.



Eps =1 

MinPts = 4 

일때의 값일때의 DBSCAN의 모습이다.




DBSCAN Algorithm

모든 포인트들이 결국 core, border, noise 이 셋중 하나로 라벨링 됨.
noise point들이 제거 된다.
2개의 코어 포인트 사이에 edge를 생성 하게 된다.
연결된 코어 포이느트들의 그룹을 생성한다 어떤 분할된 클러스터 안에
각각의 border point를 연관된 코어 포인터의 하나의 클러스터로 연결 시킨다.






노이즈에 강건 하다.

서로 다른 모양과 크기의 클러스터들을 핸들 할 수 있다.


단점

밀도가 서로 다를 경우

고차원 데이터 ( 고차원 데이터는 밀도가 낮아지는 현상)




Cluster는 어떻게 평가 할 수 있을까?

Numerical measure는 다음과 같은 세가지 타입이 존재 한다.

External Index:
    클래스 라벨이 존재하는것으로 테스트 한다.


Internal Index:

외부 데이터 없이 goodness를 측정하는 방법이다.

Sum of Squared Error (SSE)


Relative Index:

External과 Internal 방법을 모두 사용 한다.















'AI > Theory' 카테고리의 다른 글

순차데이터 분석을 위한 Hidden Markov Model (HMM)  (0) 2015.06.08
Anomaly Detection  (0) 2015.06.07
Deep Learning  (0) 2015.06.03
Association Analysis Basic Concepts and Algorithms  (0) 2015.04.27
Bayesian Classifiers  (0) 2015.04.23

Deep Learning 공부 자료


Deep Learning at NAVER

Naver Deview 강연

Imagenet contest
매년 정해진 이미지를 가지고 얼마나 더 잘 분류하는지를 경쟁하는 대회이다.
이 대회에서 1990년대 이미 흥망성쇠를 경험 했던 Deep neural network이 다시 엄청난 성능을 나타내며
부활하자 사람들이 Deep neural network으로 돌아오게 됬다.

Back propagation.
미분값을 전이하게 된다.
결국 layer가 뒤로 전이 되면서 weight vector를 찾아 내기 때문에
초기의 작은 에러가 큰 에러를 생성할 수 있다.
결국 레이어가 깊어지면 학습하기 어렵다. 작은 변화도 크게 작용하기 때문이다.
아무렇게나 막 쌓는다고해서 동작하는게 아니다.

딮 러닝의 키는 데이터인데
결국 서비스가 막강해야 데이터를 많이 모으고 그래야 또 서비스가 좋아진다.
학습 Data를 그대로 모사하게 된다. 
overfitting의 문제: 학습 데이터를 그대로 모사하게 된다.
데이터가 적을때는 오버피팅 문제가 바로 발생한다.

결국이 overfitting이 DeepLearning의 최대 장점이자 최대 단점이다.
양날의 칼날이다. 데이터가 많으면 최대의 장점이고 적으면 크리티컬한 단점이다.
노이즈를 추가해서 본질적인 부분이 계속 떠오르도록 할 수도 있다.
이말의 의미는 결국 고양이를 학습할떄 좌우 반전을 하던가 고양이 발과 같은 것들을 일부러 가려주는 방식으로
오버피팅이 잃어나지 않도록 하는 것이다.
학습이 좀더 고양이 본질에 다가설수 있도록 한다.
그렇다고 고양이 얼굴을 가려버리면 안된다.

해당 Domain에 대한 어느정도 학습을 수행하는 사람의 지식이 필요하다고 할 수 있다.

이전에는 오버피팅을 막기위해서
priori 지식이 필요했다.
이래야 됬었다.

하지만 요즘은 데이터가 많으니
필터조차 학습을 통해서 만들어 내게 된다.

예전에는 피터 익스트렉션을 사람이 해줬다.
하지만 필터를 이제 기계가 만들어준다.

그럼 아래와 같은 그림 처럼
예전에 인간이 만들어준 prior knowledge 보다 더 좋은 성능을 Big-data를 통해서 달성 할 수 있게 된다.

그럼 무작정 Data가 많으면 되는 것인가?
아무리 빅 데이터라도 분명히 커버하지 못하는 부분이 존재 한다. 따라서 그러한 부분에 대해서는 Prior knowledge를 통해서 커버를 해야한다. 하지만 빅 데이터가 커버하지 못하는 영역이므로 찾아내기란 그렇게 쉽지는 않다.

Big Data

기본적으로 Neural network에서 사용하는 Data는 supervised learning의 데이터이다.
따라서 정답이 존재하는 Data를 사용해야 한다.

정답이 있는 데이터를 모으기란 너무 어렵다.

흔이 쓰는 데크닉이 크라우드 소싱이다.
캡차 같은것이 그것이다.

semi-supervised learning
클러스터링 한다음 그다음 지도학습

스타트업에서의 Deep learning을 하기 위한것

데이터가 적은 상황에서의 딥러닝
일단 만들고 beta 서비스를 통해서 데이터를 모아야한다.

Transfer learning
지식의 전이

데이터를 공유한다.
한국어 학습 데이터를
일본어 학습 데이터로 활용 한다.

비슷한 도메인을 재활용 한다.

Speed (hardware)

모든 weight가 다 필요하지는 않다.

차원의 감소를 수행 한다.

다 필요하지만, 모든것이 필요하지는 않다 항상

GPU, CuNet (Nvidia)에서 개발됨
딮러닝이 될 수 있다.
몇줄만 써도 할 수 있다.
툴로써는 쓰기 쉽게 되어있다.

Deep Learning이 최종 솔루션인가?

이제 시작이다.
아직 인간의 뉴런갯수와 비교하면 한참 멀었다.

하지만 좋은것은 이제 시작인것에도 불구하고 성능이 다른 Machine Learning 알고리즘들을 압도하고 있다.

Deep Mind

https://www.youtube.com/watch?v=EfGD2qveGdQ

nature letter. Human-level control through deep reinforcement learning
해당 논문은 Deep neural network과 reinforcement learning algorithm을 적용함.

2014년 1월에 650만 달러에 구글에 DeepMind는 인수 합병댐

Deep Learning 자료

쉽게 풀어쓴 딥 러닝의 모든 것
http://slownews.kr/41461

구글 - Deep mind 인수
페이스북 - 뉴욕대학 얀 러쿤(Yann LeCun) 교수
바이두 - 스탠포드 앤드류 응(Andrew Ng) 교수

캐나다 토론도 대학: 제프리 힌튼 (Geoffrey Hinton) 교수 (Deep Learning의 1등 공신)

Andrew Ng (사이트)
http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial

Deep Learning (python site)
http://deeplearning.net/

머신러닝 기초 정리잘된 블로그
http://www.whydsp.org/237

관련기사 스크랩

인공지능과 딥러닝 8-1: 사람의 뇌에 '구글'을 이식하다
일자리 둘러싼 인간과 컴퓨터의 생존경쟁
인공지능과 딥러닝 빅데이터 안고 부활하다.

MOOC 자료

Google Launches Deep Learning with TensorFlow MOOC (Udacity)
Udacity 강의
해당 강의는

강사는 Vincent Vanhoucke로 Google’s deep learning infrastructure team 팀의 책임연구원이다.
박사학위를 스탠포드에서 받았다.
이력: http://research.google.com/pubs/VincentVanhoucke.html

Google Research Blog 공식 발표:
http://googleresearch.blogspot.kr/2016/01/teach-yourself-deep-learning-with.html

With interest in both deep learning and TensorFlow reaching remarkable heights, Google has just announced a new Deep Learning Course developed in partnership with Udacity.

The course is made up of four lectures, covering the following:

  • Lecture 1 - Focuses on machine learning basics, including setting up data and experiments, and training simple classification models.

  • Lecture 2 - Builds on the fundamentals, exploring how to make models deeper, and exploring scalability issues such as hyperparameter tuning and regularization.

  • Lecture 3 - All about convolutional networks and image recognition.

  • Lecture 4 - Explores models for text and sequences in general, with embeddings and recurrent neural networks.


'AI > Theory' 카테고리의 다른 글

Anomaly Detection  (0) 2015.06.07
Unsupervised Learning: Cluster Analysis  (3) 2015.06.03
Association Analysis Basic Concepts and Algorithms  (0) 2015.04.27
Bayesian Classifiers  (0) 2015.04.23
K Nearest Neighbors - Classification  (0) 2015.04.23

Google I/O 2015 Keynote의 주요 내용



2015년 5월 29일 한국시간으로 새벽 1시 30분에 열린 Google I/O 2015의 Keynote에서 등장한 주요 내용을 다루도록 한다.


이번 구글 I/O 2015에서 다루는 것은 크게 두가지이다.

첫 번째는 어떻게 구글이 컴퓨팅 플랫폼과 모바일을 혁신하는지에 대한 것과

어떻게 구글이 모바일 사용자 경험(UX)를 혁신 하는지에 대한 것이다.




Android M Preview



안드로이드 M은 다시 기본으로 돌아가서, Policy와 safety 그리고 Quality에 그 초점을 맞춘다.

작년에 출시된 안드로이드 L의 경우 많은 변화를 가져왔지만, 안드로이드 M은 그러한 큰 변화는 없다.


안드로이드 M의 발표자는 아래와 같다.

(Android) Engineering 

Vice president

Dave Burker 

 


안드로이드 M의 변화는 아래와 같다.




App Permissions


기존의 permission들을 몇개의 중요한 케테고리로 통합함으로써 사용자들의 이해를 높였다.

설치할 때 permission을 물어 보는것이 아닌 실행 할 때 permission을 물어보게 만들었다.

또한 App permission을 App별로 다시 재조정할 수 있게 되었다.



한층더 보안을 신경 썻다고 할 수 있다. 



Web Experience


웹 앱을 개발자가 개발하려고 할 때 선택할 수 있는 옵션은 크게 두가지였다.


첫 번째는 Browser를 이용해서 앱을 실행 하는 것이고 두 번째는 Web View 를 이용하는 것이다,

두 번째는 Web View를 이용하는 것이다.


하지만 이제 새롭게 나온 방법인 Chrome custom taps을 이용하면 된다.

이것을 이용해서 ahead of time에 prefetch하는 작업을 할 수 있다.

통합 디자인을 설계할 수 있게 된다.



App Links 


앱을 실행해서 다른 앱과 연결을 하려고 할때 이제 선택을 하지 않고도 자동으로 연결 되어지게 할 수 있다.

개발자가 특별히 설정을 해주면 사용자의 선택 없이도 자동으로 연결 되어 진다.







Mobile Payments


To pay in store, users can do using NFC.

No need to lunch certain app.

Can use debit card or credit card.

700 hundred stores.



Fingerprint Support


결제를 인증하기 위해서 사용자의 지문이 사용 될 수 있다.

온라인 구매에서도 사용자의 지문이 사용 될 수 있다.

이것으 매우 편리하며 간단하게 결제를 진행 할 수 있게 해준다.


단순히 스마트폰의 잠금화면을 푸는것을 이용해서 결제를 진행 할 수 있게 되기 때문이다.



  



Power & Charging 


안드로이드는 Doze라고 불리우는 새로운 파워 메니지먼트 시스템을 도입 했다.


해당 기능은 사용자의 패턴을 사용해서 최적화를 진행 하게 된다. 

예를 들면, 사용자는 항상 테블릿을 영화나 책을 읽이 위해서 저녁에만 사용 했다고 하자.

이럴경우 사용패턴을 인지해서 네트웍 전력소비를 강하게 제한 할 수 있다.


아래는 데이터 동기화 화면이다.


사용이 발생 되어지지않는 저녁 시간에는 주기적으로 발생하는 동기화를 극히 제한하게 된다.

이를통해서 전력소비를 그렇기 않을때 보다 실험결과 2배까지 절약했다고 한다.






충전 기술의 경우 구글은 USB type C charger를 도입 했다.

이를 통해서 좀 더 빠른 충전을 달성 할 수 있다.



 




약간의 사용자 편의성 향상


Easy word selection and Floating clipboard toolbar

Direct share 기능

Simplified volume controls






Android Wear


Android Wear의 발표자는 아래와 같다.

Director, Android Wear

David Singleton


최근 일년간 안드로이드 웨어는 아래와 같이

4개의 OS와 7개의 웨어 제품군을 출시해 왔다.





상호작용 기능의 향상


Android Wear의 기능향상의 초점은 Phone과의 상호작용 기능 향상이다.


이중 가장 흥미로웠던 것은 Emoji recognizer로써 그림을 그려서 메시지를 응답하는 기능이었다.








다양한 센서들의 활용


안드로이드 웨어기기에 작창된 센서의 종류는 계속해서 늘어나고 있다.

아래의 그림과 같이 많은 센서들이 현재 장착된 상황이다.




이러한 센서 데이터를 이용해서 사용자들의 행동을 인지하게 된다.

즉 걷기, 달리기, 자전거 타기, 팔굽혀펴기, 골프 스윙 등을 인지 하게 된다.


Google Fit 앱의 운동정보 인지 내용


팔의 가속도를 인지해서 골프 스윙을 알아냄.



그 밖에도 스마트홈의 집 온도 인지

노래 재생

노래 가사 인식을 통한 음악 이름 알아내기

자동차 주행거리 파악 등이 있다.





현재 마켓에 등록된 웨어러블 앱은 4,000개 이상







Google의 Internet of Things


구글에서도 IoT를 장학하기위한 전략을 발표 했다.


그들이 생각하는 중점은 User Experience, Communications, Operating System 이렇게 3가지 이다.






Operating System


구글은 이를 위해서 Brillo라는 새로운 OS project를 발표 했다.




Communication


Google은 Cross Platform에서 개발자들이 편하게 앱을 개발할 수 있는 API를 제공한다.

이 프로젝트의 이름은 WEAVE 이다.





User Experience


사용자들은 여러개의 장치에서 하나의 UX를 경험 할 수 있다.

이를 위해서 Brillo와 WEAVE가 사용된다. 이 둘을 이용해서 마치 하나의 장치를 쓰는것과 같은 경험을 할 수 있게 된다.




Brillo와 Weave는 각각 아래와 같이 공개 된다고 한다.





User Experience의 통합 




구글은 Deep Machine 러닝을 통해서 사용자 경험의 향상을 모색 한다.

구글의 이미지 검색 능력이 세계 최고인것은 이미 잘알려진 사실이다.

Deep Neural Network을 간략히 설명하면 개구리 이미지를 찾기 위해서 여러 계층으로 나눠서 학습을 해서 찾아가는 방법이다.


기본적으로 계층적인 학습 모델을 가지는 것을 의미한다.


우선 첫 번째 계층에서는 edge, shade, shape등을 판별하게 된다.

두 번째 계층에서는 ear , leg, hand 등을 판별하게 된다.

마지막에서는 전체 이미지를 이해하게 된다.


간략하게 설명하면 deep neural network은 위와 같이 동작 한다.


이러한 Deep Learning을 통해서 구글은 음성인식 기술을 향상 아래와 같이 많이 개선 시켰다고 한다.






Google Now


발표자

Director

Google Now

Aparna Chennapargada



모바일이 사용자를 지원하기 위해서는 크게 아래 세가지가 필수 적이다.



위 세가지를 적절히 인지해서

사용자가 요청한 상황에 맞게 자동으로 원하는 정보를 표시해 준다.


기존의 Google Now 기능이 대폭 개선됬음을 의미한다.


예를들면, 아래와 같이 친구로부터 Tomorrowland라는 공연을 보자는 이메일을 받았을 때

홈버튼을 눌러서 Google Now를 실행하는 것만으로도 Tomorrowland라는 공연 정보를 바로 알 수 있게 된다.


이렇게 현재 상황에 맞춰서 내가 원하는 정보를 즉각적으로 표시해 주는 서비스 이다.






Google Photo



발표자

Photos

Director

Anil Sabharwal



구글에서는 사진을 관리하기 위한 새로운 앱을 출시 했다.


현재 사진관리는 하나의 포토를 찾기 위해서 끈임 없이 스크롤링을 해야하는 것을 지적 했다.


그들이 Google Photo에서 추구하는 전략은 크게 3가지 이며 아래와 같다.





그들은 기계학습을 이용해서 삶에서 중요한 이미지가 무엇인지를 자동으로 인지 하게 된다.


이러한 서비스를 무료로 무제한으로 구글은 제공한다고 한다. 

지금 부터 당장 사용 할 수 있다.






Google Translator


발표자

Engineering

Vice President

Jen Fitzpatrick






Developing



발표자

Developer group

Director

Jason Titus



발표전 나온 동영상에서 개발자들이 가지는 힘에 대한 영상이 있는데 감동적이었다.

마지막 문구는

Keep Building 이었다.


끈임없는 이슈는 아무래도 개발자들을 지원 하는 것일 것이다.



Developing life cycle은 아래와 같다. 이 각각에 대해서 언급 했다.





이미 안드로이드 앱 개발을 위해서 Eclipse 서비스를 중단하고 Android Studio를 출시 했었다.


이러한 Android Studio의 새로운 1.3 버전을 이야기 했다.

또한 NDK 개발자들을 위핸 C/C++ 지원도 이야기 했다.





Cloud Test Lab

개발자들의 테스트의 어려움을 해결해 주기 위해서 

22개의 스마트폰에서 자동으로 테스팅을 수행하며

그 결과를 받아 볼 수 있는 시스템을 제공할 것이라고 한다.


제공받을 수 있는 결과는 Crash report와 테스팅 과정이 기록된 Video 이다.


곧 출시된다고 한다. 






Google Play


Google Play

Product Manager

Ellie Powers


Personality와 연령을 고려한 검색 등을 강화 했다고 한다.


그리고 개발자들이 자신의 앱이 설치된 상황등을 기존 보다 더 자세히 볼 수 있다고 한다.






Udacity의 새로운 강의



3대 MOOC중 하나인 Udacity이다.

대학들이 중심이된 Coursera와 Edx와 다르게 Udacity는 기업들이 중심이 되서 만들어진 온라인 교육 사이트이다.


이곳에 Android Nanodegree라는 코스가 개설 되었다고 한다.





Google Cardboard


마지막으로 구굴은 Virtual Reality (VR)을 지원하기 위해서 

지난해 발표 했던 cardboard의 향샹과

새로운 SDK를 발표 했다.







그리고 Gopro와 결합 되어 360도 촬영을 가능하게 해주는 JUMP도 출시 했다.





LG Watch Urbane (LG 어베인)을 통해서본 스마트 시계의 철학

  웨어러블 기기들의 디자인 철학


Android wearable 2.0이 출시 되었다.

스마트 가젯 기기를 사용해 보기위해서


LG 어베인을 구입 했다.

약 2주간 사용해본 경험을 이야기 하겠다. 




스마트 시계의 종류 (2015.5월 기준)


  • LG G watch
  • LG G watch R (세계최초 원형 디자인)
  • LG G watch Urbane (필자가 구매)
  • LG G watch Urbane lte
  • Sony Smartwatch 3
  • Asus ZenWatch 
  • Motorola Moto 360
  • Samsung Gear Live
  • Apple Watch


이렇게 많은것들 중 urbane을 선택한 이유는 아래와 같다.


1) Android Wear 탑제

삼성과 LG의 경우 자체적인 OS를 탑제하는 경향이 있다.

삼성은 타이젠을, LG는 LG Wearable Platform을 탑제 한다.

하지만, 이것은 좋지 않다. 앱도 많이 없고 해당 플랫폼이 활성화 될수는 없다.


2) 디자인

현재까지 나온 스마트 워치중에서 가장 시계다우며 디자인이 이쁘다.


3) LTE를 고르지 않은 이유

월 11,000원 내고 전화기를 2대 들고 다니고 싶지 않다.

LTE 탑제는 발열 문제를 야기 시킨다.

배터리가 410mAh -> 710mAh로 늘어나면서 무거워 졌다.

Android Wear가 아닌 LG Wearable Platform을 쓴다 (가장 안좋은 이유).

제품 가격이 비싸다.



Watch의 쓰임


TED에서 구글 공동창업자인 세르게이 브린과 Google I/O 2014에서 선더 피차이 수석 부사장이 이미 웨어러블 기기의 철학을 이야기 했었다.


스마트 시계와 안경의 근본적인 철학은 사용자들이 더이상 스마트폰을 처다보며 인생을 낭비하지 않게 하기 위함이다.

우리는 눈앞에 친구와 연인 가족이 있음에도 의미 없는 유리조각 따위를 습관적으로 문지르며 소중한 시간을 놓치고 있다. 


이러한 행동을 바꾸기 위해서 

언제든지 필요하다면 즉각적으로 몸에 부착되어서 알림이 오는 웨어러블 기기의 쓰임을 강조 했다.


아래의 그림은 Google I/O 2014 Keynote에서 사용된 자료이다.

보통 스마트폰을 사용했을 때 알림이 오면, 사람들은 폰을 보고 그상황에서 폰을 보는 지속시간을 나타낸다.

빈도는 적지만 일단 폰을 보게되면 실제 삶과 단절되는 시간이 길어진다.


하지만 웨어러블 기기를 사용하게 되면 빈도는 늘어나지만 짧게 확인하고 바로 현실로 돌아 오게 된다.

웨어러블 기기의 쓰임과 철학은 바로 이것이다.


더 즉각적으로 가상세계와 연결되며 좀 더 실제 삶을 살가게 하는것.


 



실제 사용 경험


일단 필자는 지샥 전자시계를 항상 차고 다녀서 항상 막강한 기능의 시계를 갈망 했었다.

따라서 만족 한다.


아래는 필자가 사용하는 시계 화면이다.

실제로 마켓에는 N가지의 시계 배경들이 있고 모두 멋진화면을 제공한다.

아래의 앱은 InstaWeather라는 앱이다.


 


첫번째 화면은 행동이 없을때 Ambient Mode로 저전력 상태에서 보여주는 화면이고

두번째 화면은 팔을 움직였을때의 Active Mode일 떄의 화면이다.


보여주느 정보는 아래와 같다.

  • 시간별 날씨
  • 시계 배터리
  • 폰 배터리
  • 지역


그밖에 좋은 어플은



Audio Recorder: 음성 메모

Sleep: 수면 상태 분석

Wear Aware: 스마트폰과 멀어지면 자동 알림 (폰불실 방지)

Google Fit: 운동 상태 체크, 걸음수, 심장박동 (BPM), 활동량 등




단점


솔직히 말하면 아래와 같은 단점이 있다.


정신 사납다

앞서서 철학이 실제 삶에 더 충실하게 만들어 준다고 했지만

사실 시계를 참으로써 기존에는 인지 하지 않았던 수많은 Notification들을 인지하게 된다.

매번 스팸 처리하지만 계속해서 새로운 것들이 Vibration를 통해서 알림이 온다.


그렇다고 아에 Mute 모드로 쓰게 되면 기존에 스마트폰만 쓸때와 다를께 없게 된다.

철학은 사람들을 distract 하게 하지 않는 것이지만 

실제로 쓰면 스마트폰만 쓸때 보다 더 실제 삶과 단절 된다. 



시계가 가지는 사획적인 의미

사실 시계를 처다본다는 것은 스마트폰을 처다보는것과는 다른 사회적인 압박이 있다.

바로 회의중에 시계를 자꾸 처다보면 발표자로 하여금 발표를 빨리 끝내라는 뉘양스를 주게 된다.

실제로 회의중에 쓸때없는 스팸으로 시계를 몇번 쳐다 보았다가 발표자가 말을 빨리 했고 그결과 회의가 더 빨리 끝나는 경험을 했다.

즉, 시계를 자주 보는것은 타인에게 그다지 좋은 영향을 주지 않는다.



스마트폰 배터리 소모

스마트 시계는 항상 스마트폰과 페어링(동기화) 된 상태에서 동작한다.

따라서 스마트 시계를 쓰면 스마트폰이 배터리가 더 소모되는 기이한 경험을 한다.


실제로 멀티미터기로 전류소모를 측정해본결과

Bluetooth 4.0과 Processor에 의해서 소모되는 에너지소모는 무시할 수 없었다.

더욱이 먼거리에서 Wi-Fi로 두 장치가 페어링 된다면 더 에너지소모가 가중 된다.










'Computer Science > IT Issue' 카테고리의 다른 글

Sensing Emotions (Affective Computing)  (0) 2015.10.22
Google Alphabet  (0) 2015.08.12
페이스북의 역사 / The history of Facebook.  (0) 2015.07.24
Google I/O 2015 Keynote의 주요 내용  (0) 2015.05.28
Android New Runtime  (0) 2014.11.20

일체형 (embedded) vs 교체형 (removable) 배터리


요즘들어서 삼성도 일체형 배터리로 갤럭시 s6 출시하면서 일체형 배터리의 강세가 이어지고 있다.

딱 봐도 불편해 보이는 embedded battery (non-removable battery) 왜, 어째서 제조사들은 이것을 채택 하는 것일 까? 

그 장점에 대해서 알아보자.



교체형 배터리의 장점 (Advantage of removable battery)


1) 배터리 교체가능

2) wear-out (마모) 즉, degradation 됬을때 쉽게 교체 가능

3) freezing 되었을 때 배터리 제거를 통해 쉽게 reset 가능.



일체형 배터리의 장점 (Advantage of embedded battery)



1) 디자인과 공간의 절약

배터리에 분리막과 커버를 제거할 수 있다. 또한 connector도 필요 없다. 

이러한 부가적인 요소들의 제거는 제품의 디자인 향상에 매우 큰 도음을 준다.


아래의 그림은 직접 Nexus 5를 Teardwon 해서 배터리 커버를 확인한 결과이다.

아래와같이 Kapton Film으로 제작된 커넥터로 스마트폰 기판과 직접 연결된다. 

그리고 보호 compartment도 없다


추가로 배터리 교체가 없기 때문에 스마트폰의 소재를 다양하게 가져갈 수 있다.

즉 플라스틱과 같이 탄성이 좋지 않으면 교체형 배터리의경우 사용할 수 없다. 왜냐하면 커버를 자주 열면 금속 소재는 금방 휘기 때문이다. 디자인과 공간 절약 면에서 일체형 배터리를 많이 선호하게 된다.




2) 환경보호

배터리는 서비스센터에서 대부분 교체되므로 적절히 분리수거 된다.

또한 무분별한 배터리 교체를 억제함으로써 적은수의 배터리 사용을 유도한다.



3) 배터리 용량 추정의 정확도 향상 (배터리 용량 지시자의 성능향상)

배터리를 하나만 쓰기 때문에 embedded fuel gauge의 성능이 좋다. 

항상 하나의 배터리와 동기화 되기 때문이다.

배터리를 교체 했을때, 노화를 고려해서 게이지를 설정하는것은 Challenge이다. 

매번 Calibration을 새로 해줄 필요가 없다.



4) 안전성이 높은 배터리의 사용 

중국발 저가 배터리 사용을 어느정도 소비자가 하기 어렵기 때문에 저품질 배터리가 사용될 가능성이 적다. 

따라서 안전성이 올라간다고 한다.





참고사이트: http://shadowgadgetreview.blogspot.kr/2012/10/sentiments-about-trending-embedded.html



Android Studio 특징 및 단축키


앱 개발을 위해서 이제는 Android Studio를 사용 해야함.


Android Studio의 장점을 요약하면 아래와 같다.


1) interface design 지원이 강력하다.


2) Build 시스템을 Gradle로 변경 했다.

이부분이 문제이다. 많은 것들이 Gradle에 걸려있기 떄문에, Eclipse를 사용할 때와 다르게 Gradle을 새로 배워야 한다.

요즘 뜨는 강력한 Build 도구라고 하니 이참에 배워야 할것 같다.




단축키 모음


실행 , 환경설정

- Ctrl + Alt + S : 환경설정

- shift + F10 : Build & Run


찾기 관련 

- Ctrl + Shift + N : 전체 검색

- Ctrl + Alt + L : 정렬

- Shift * 2 (Shift 2번) : 전체 찾기


변경, 삽입, 삭제

- Shift + F6 : 태그 동시 변경 (빨간 네모)

- Ctrl + y : 한줄 삭제

- Alt + i : getter, setter 삽입

- Ctrl + i : 인터페이스 

- Ctrl + o : 메소드 오버라이딩


주석, 정렬

- Ctrl + / : 주석

- Ctrl + Alt + L : 코드라인 정렬


이동 

- Alt + 1,6,7 : 익스플로어, 로그켓

- Alt + 좌,우 : 탭 이동

- Ctrl + b : 선언부로 이동


디버그

- Shift + F9 : 디버그 모드

- Ctrl + F2 : 디버그 모드 종료

- F9 : 다음 중단점 까지 실행

- F7 : 멈춘 라인에 메소드 속으로 들어감

- F8 : 한줄만 실행

- Alt + F9 : 커서 있는 곳까지 실행

- Ctrl + Alt + F9 : 강제로 커서까지 실행

- Ctrl + Shift + F8 : 설치된 중단점 모두 보기 


사용하지 않는 Import 정리 

- Ctrl + Alt + o


자동 완성 / 수정 

- Alt + Enter


이름 바꾸기

- Shift + F6


코드 정렬

- Ctrl + Alt + L


메소드 오버라이드(Override method)

- 상위 클래스 내에 잇는 오버라이드 가능한 메소드의 목록 보여주고, 

 선택한 항목을 자동으로 코드에 추가한다. 

- Ctrl + O 


인터페이스 구현 

- Ctrl + I


문서보기 

- F1


매개변수 정보

- Ctrl + P


선언부로 이동

- Ctrl + B


통합검색

- Shift + Shift (Double Shift) 


Go to class CTRL + N
Go to file CTRL + Shift + N
Navigate open tabs ALT + Left-Arrow; ALT + Right-Arrow
Look up recent files CTRL + E
Go to line CTRL + G
Navigate to last edit location CTRL + SHIFT + BACKSPACE
Go to declaration CTRL + B
Go to implementation CTRL + ALT + B
Go to source F4
Go to super Class CTRL + U
Show Call hierarchy CTRL + ALT + H
Search in path/project CTRL + SHIFT + F

Programming Shortcuts:-

Reformat code CTRL + ALT + L
Optimize imports CTRL + ALT + O
Code Completion CTRL + SPACE
Issue quick fix ALT + ENTER
Surround code block CTRL + ALT + T
Rename and Refractor Shift + F6
Line Comment or Uncomment CTRL + /
Block Comment or Uncomment CTRL + SHIFT + /
Go to previous/next method ALT + UP/DOWN
Show parameters for method CTRL + P
Quick documentation lookup CTRL + Q
Delete a line CTRL + Y

View declaration in layout CTRL + B



참고사이트

http://www.developerphil.com/android-studio-tips-tricks-moving-around/

IntelliJ IDEA shortcut manual 



'Computer Science > Android Application' 카테고리의 다른 글

Android wear app  (0) 2015.08.25
Android Studio 자동 import 기능  (0) 2015.07.15
Android Wear 개발환경 구축  (0) 2015.07.15
Notifications API Guide  (0) 2015.06.29
다중 스크린 사이즈를 지원하는 방법  (0) 2014.10.27

Download Google Apps (GAPPS) for Android LolliPop


Custom ROM에는 GAPPS이라고 알려진 Google 관련 응용프로그램들이 포함되어 있지 않다.


이러한 Google에서 개발한 App들은 GAPPS이라 불리우는 zip파일 형태의 묶음으로 설치 할 수 있다.


편하게 설치하기 위해서 CWM과 같은 Custom recovery 모드가 있으면 편하다.



1단계: CWN과 GAPPS 다운 받기



PA gapps for android 5.1.x Lollipop Link

ROM Manager (CWM) Link



Gapps의 경우 여러 버전이 있지만, 통상 모든 Google service app들이 포함 되어있는 Stock 버전을 받는다.

아래 표를 참조해서 각각의 차이점을 숙지 하자.




2단계 설치하기


우선 다운받은 Gapps.zip파일을 phone의 외장 메모리에 넣는다.


그다음 CWM (Custom recvoery 설치)을 설치 한다.




정상적으로 CWM recovery mode로 진입하면

볼룸 업 다운키로 gapps.zip 파일을 찾아간다음 설치한다.

그다음 재부팅을 하면 정상적으로 Google app들이 바탕화면에 있는것을 볼 수 있다.






리튬이온 배터리 특성 및 오래쓰는 방법 정리 

(Lithium-ion battery characteristic)



기본 특성


 

우선 Lithium-ion battery의 특성에 대해서 간단히 알아보자.

Nickel-cadmiu과 다르게 memory effect가 없다.

언제든지 충전해도 상관 없다. 정말 그런것일까? 논문과 책을 통해서 검증 해보자.

리튬이온 배터리의 수명은 300~500회 충방전 사이클이라고 한다.

그 이상이되면 기존 용량대비 40% 정도를 잃어버리고 업계에서는 그 지점을 폐기해야할 배터리 시점으로 본다.

하지만 이 충방전 사이클이라는 것을 정확히 정의하기란 쉽지 않다. 왜냐면 일상생활에서의 충방전의 깊이는 모두 다르기 때문이다.

즉, 10%쓰고 충전한 것을 1사이클로 볼 것인가? 아니면 100%까지 다 쓰고 충전한 것을 1 사이클로 볼 것인가?

대부분 100%까지 다쓰고 충전한것을 충방전 사이클로 본다. 정확하지 않겠지만 10%씩 10번 충방전하면 1번의 충방전 사이클로 다룬다.

 

그렇다면, 어느 정도 까지 쓰고 충전해야 좋은 것일까? 그 부분에 대해서도 데이터를 가지고 확실히 다루겠다.


Lithum-ion의 분명한 단점은 아래와 같다.

폭발 위험이 크다. 그나마 요즘은 구멍이 좀 생겨도 터지지는 않는다. 하지만 구멍난 상태에서 전원을 인가하면 화제가 발생한다.

사용하지 않아도 노화가 발생한다[1]. 따라서 배터리 구입할 때 제조년과 월을 꼭 확인하자. 새제품이라고 하여도 오래된것은 노화된 것이다.

출력이 방전 패턴과 온도와 같은 물리적 요소에 많이 의존적이다[1].



노화를 발생시키는 요소는 크게 4가지이다.


T: Temperature

DCR: Discharge Current Rate

CV: Charge Voltage

DOD: Depth of Discharge

 

결국.

$$CycleLife (ShelfLife) = F(T, DCR, CV, DOD)$$

라는 공식이 나오게 된다.



아래글을 간단히 요약해서 리튬이온 배터리 특성에 맞춘 적절한 사용 방법은 아래와 같다.

1) 조금만 쓰고 바로바로 충전해라. 깊게 쓰고 충전하는것은 안좋다.

2) 온도에 매우 민감하니 20~30도 사이에서 쓰는것이 적당하다.

3) 방전률이 높으면 안좋으니, 갑자기 스마트폰을 full 가동 시키는것은 좋지않다. 

4) 방전을 요동치며 하면 좋지 않으니, 가급적 일정하게 사용해라.

5) 100% 충전된 상태에서 스마트폰을 충전기에 꽂고 있어도 대기전력 낭비 이외에는 큰 문제는 없다.

6) 스마트폰을 충전기에 꽂고 쓰는 상태가 배터리 노화 예방에 더 좋다.

7) 리튬이온 배터리는 쓰지 않아도 노화가 발생하니, 아끼지말고 쓰자.



방전 사이클당 리튬이온 배터리의 노화정도[2]



11개의 Li-polymer 배터리 1500mAh의 배터리에 대해서 실험했다.


실험과정

1) 1C/4.2v로 풀충전

2) 0.05C로 포화 충전

3) 1C/3.0V로 방전하며, Depth of Discharge(DoD)는 100% 이다.

4) 위 과정을 반복 했다.


관찰점

방전 사이클이 0인 지점에도 Cadex C7400 배터리 분석기로 분석한 결과 초기 Capacity는 88~94%를 가지는 것을 알 수 있다. 100%가 아니다.

그리고 이것이 250번 사이클 반복할 경우 73~84%까지 용량이 줄어듬을 알 수 있다.

DOD 100%가 아닌, 좀더 낮은 DoD를 수행할 경우 배터리 수명(shelf life)는 늘어 난다.

DOD의 영향은 아래에서 더 자세히 다루겠다.







온도와 방전 전압에 따른 노화 정도 분석[1,2]



아래 그림과 같이 온도가 20도이고 방전 전압이 4.1v 일때가 기간에 따른 노화정도가 가장 적었다.

즉, Li-ion은 좀 더 낮은 전압과 온도에서 사용성이 좋은것을 알 수 있다.





각각의 온도에서 방치했을 경우, capacity loss가 아래와 같이 발생 한다.

즉 배터리가 높은 온도에 있는 상태에서 충방전을 장시간 반복할경우 기본적인 충방전일때 보다 스트레스를 더 많이 받아서 노화가 심하게 잃어 나게 된다.







방전 전류량(C-rate) 및 패턴에 따른 노화 (Discharge Current Rate)[3,4]



xOver-discharge를 허용하지 않는다.

모두 충전했다가 방전하는 것을 Discharge/Charge cycle이라 한다.

제조사는 80%만 방전하고 20%는 남겨 놓는 것을 선호 하나.

There are no standard definitions to define what constitutes a discharge cycle. 

Smart battery에서는 70% 이상의 DOD 만을 cycle count로 고려한다.


아래의 그래프와 같이, 2C로 땡기면 3.2Ah 중에서 2.3Ah만 사용이 가능하게 된다.




아래의 그래프는 journal of power source[4]에서 인용한 것이다.



다음 실험은 일정한 방전과 pulsed 방전과의 관계를 따져본 실험이다.








충전 전압과 노화와의 관계 (charge voltage)[1,4]




아래 그래프는 방전 cycle에 따른 노화정도를 나타낸것이다.

같은 전압과 전류로 같은 횟수 만큼 방전을 수행해도 

더 높은 전압으로 충전할경우 노화가 빨리 진행 되는 것을 알 수 있다.





아래와 같이 충전 전압을 서로 다르게 했을 때의 충방전 사이클의 감소를 볼 수 있다.

충전 전압이 높을 경우 더 적은 수의 충방전 사이클로도 노화의 기준인 70% 용량에 도달하는 것을 알 수 있다.


재미있는 사실은 고전압일 수록 용량 충전률이 높은것을 알 수 있다.

저전압이면 수명은 늘어나지만, 완전 충전이 안되는 것을 알 수 있다.




충방전 사이클에 따른 용량 감소를 그래프로 표기한 것이다. 해당 그래프는 journal of Power Source 논문에서 인용된 것이다[4].




결국 충전 전압은 노화에 매우 중요한 요소이며, 안전성에도 매우 중요한 요인이다.

따라서 배터리 팩에는 반드시 관전압 방지 MOSFET이 들어 있다.

스마트폰 같은경우 TI나 Qualcomm사에서 PMIC 칩을 만들어서 스마트폰에서 과전압을 방지한다. 거의 나노레벨에서 차단이 된다고 하니 걱정은 없다.



스마트폰과 같이 배터리가 상대적으로 저렴하고 교체가 용이한 장치는 고전압으로 충전해서 용량을 100%까지 맞춘다.

하지만, Satellite(인공위성) 그리고 전기 자동차의 경우 longevity가 훨씬 더 중요하다. 따라서 완전 충전은 못하더라도 수명을 늘릴수 있는 저전압으로 충전을 수행하게 된다.




충전 전류와 노화외의 관계 [4]



충전 전류를 서로 다르게 했을 때의 노화 정도를 나타낸 것이다.

1C의 의미는 1시간동안 100% 방전 했다는 의미 이다.






방전 깊이와 노화와의 관계 (Depth of Discharge)[1]



최대한 깊이 방전하는 것을 피하는것이 절대적으로 배터리 노화를 막는다.


아래 실험은 서로 다른 DoD 레벨로 수행한 실험이다.

서로 다른 DoD 레벨로 방전을 시키고 

어느 정도 충방전 사이클을 반복해야 용량이 70%에 도달하는지를 조사 했다. 

충전 전압, 온도, 방전 전류의 양은 모두 평균적으로 같게 만들었다.



실험 결과대로 DoD가 낮으면 낮을 수록 새배터리 용량 대비 70%까지의 Capacity에 도달하게 하는

충방전 사이클이 커지는것을 알 수 있다.


따라서,100%DoD는 오로지 소프트웨어적인 배터리 잔존 용량 예측 향상을 위한 Calibration을 위해서만 수행한다.

즉, 더 정확한 배터리 눈끔을 보장하기 위함이다. 한달에 1번 정도면 충분하다.

그외에는 Partial discharge가 배터리 수명 연장을 위해서 절대적으로 좋다.



충전 깊이와 노화와의 관계 (Shallow Charge)[5]


결론 부터 말하면, 살짝 살짝 충전한다고해서 급격하게 Capacity Degradation이 발생하지 않는다.

약간의 구조상의 전기적 변화가 있겠지만, 이러한 문제는 거의 미미 하다고 할 수 있다.

찔금 찔금 충전해도 상관 없다는 말이 되겠다.

구지 매번 풀 차징을 하지 않아도 된다.










기타



과충전의 위험

일단 거의 없다.

TI 사의 PMIC 칩 Datasheet 설명에 따르면 75nA로 차단된다고 한다.

보호회로가 이중으로 되어있는 스마트폰의 경우 완충되도 충전기를 꽂는 다고해서 문제될것은 없다.


대기전력 문제

이부분은 확실히 있다.

스마트 플러그와같이 완전 대기전력 차단 플러그를 사용하지 않는 이상 대기전력을 발생한다.

로렌스 버클리 랩에 의하면 대기전력을 충전중 전력 소모의 60%를 차지 한다고 한다. 무시못할 양이다.

하지만 이쪽도 연구가 오래 진행 되었으니 조사하면 답은 분명히 엄청 많을 것이다.



 




참고 문헌


[1] Battery Power Management for Portable Devices, Yevgen Barsukov, Jinrong Qian, BOOK.

[2] Battery University: How to Prolong Lithium-based Batteries

[3] Battery University Basics About Discharging

[4] [J. of Power Source, IF:5.2, 8/83] Factors that affect cycle-life and possible degradation mechanisms of a Li-ion cell based on LiCoO2, Samsung SDI

[5] [Master Thesis in University of Maryland] Degradation Analysis and Health Monitering of Lithum-Ion






Battery Current 정보를 알아내는 위치



Nexus 4의 경우 Qualcomm PM 8921 

Nexus 5의 경우 Qualcomm PM 8941

Nexus 5x의 경우 Qualcomm PMI8994 Power Management IC (Also found in LG G4, HTC One M9, and OnePlus Two)

https://www.ifixit.com/Teardown/Nexus+5X+Teardown/51318


위 두개의 Internal Charge Controller Circuit이 존재하기 떄문에

Linux Kernel을 통해서 Current drain 정보 획득이 가능 하다.


획득된 정보의 단위는 mA 이다.

양수면 충전 중이고

음수면 방전 중이다.




cat /sys/class/power_supply/battery/current_now


아래의 오픈 소스 앱을 이용해도 대고

코드를 분석하면 앱도 만들 수 있다.

https://code.google.com/p/currentwidget/


Stack over flow 사이트

http://stackoverflow.com/questions/2439619/getting-the-battery-current-values-for-the-android-phone



GPU 정보


Gpubusy

adb -d shell cat /sys/class/kgsl/kgsl-3d0/gpubusy | awk '{print $1 / ($2+1)}‘

Utilization (0~1)


전치사 + 관계대명사


앞 문장과 공통의 명사가 뒷 문장에서 전치사의 목적어일 때 관계대명사 앞에 전치사가 온다.

She introduced her friends to the man. + She was engaged to him

she introduced her friends to the man to whom shoe was engaged.



대화 표현에서는 전치사가 관계절의 뒤에 남늘 수 있다 (미국인들 습관)

She introduced her friends to the man whom she was engaged to



전치사는 선행사 또는 관계절의 동사에 따라 결정된다.

We attended a convention at which everyone exchanged business cards

(= at the convention)

문맥상 ~에서 라는 뜻이 되야 하므로 전치사 at이 관계대명사 앞에 온다.


This is the examination for which I've been preparing.

(for the examination)

동사 prepare는 전치사 for와 짝을 이루어 '~을 준비하다' 라는 의미가 되므로 전치사 for가 관계대명사 앞에 온다.



전치사+that은 허용하지 않는다.

She introduced her friends to the man to that she was engaged (->whom)



'전치사+관계대명사' 뒤에는 완전한 절이 온다.

This is the suspect to whom the police asked many questions.




in which (=where)


in which를 쓰면 문어체 느낌이 많이 난다. 논문 작성시 많이 나오는 표현이다.


The town where Jane lives is quite rural

The town that Jane live is in is quite rural

The town in which Jane lives is quite rural.


The beach where we found that boat is on the south side of the lake.

The beach that we found that boast in is on the south side of the lake.

The beach in which we found that boat is on the south side of the lake.


The apartment where Jack stays has a nice view of the city.

The apartment that Jack stays in has a nice view of the city.

The apartments in which Jack stays has a nice view of the city.


that의 경우 전치사 뒤에 올 수 없는것이 포인트이다.




Which 와 Where 각각을 이용한 장소 설명



which를 이용해서 장소에 대한 위치를 설명 할 수 있다.


Dundas Square, which is in Totronto, is a popular tourist attraction.

Queen Margherita, which is in Dundas West, is my favorite pizzeria.

Jack's house, which is next to mine, has a beautiful garden.



where의 경우 그 장소에서 일어나는 일 설명

Dundas Square, where many tourists go, is a fun place to visit.

Queen Margherita, where you can get amazing pizza, is always crowded.

Jack's house, where I met Jane for the first time, is located in North York.


of whom


Tom is the student of whom Jack is proud.

-> Tom is the student. Jack is proud of the student.


of which

실제로는 격식형으로 동물 사람, 사물에 관계없이 많으 쓰임.


This is a play, the style of which is typical of the period. (of which ,이것의 또는 그것의


The house has now been repaired. + Its roof was damaged.

= The house whose roof was damaged has now been repaired.

= The house the roof of which was damaged has now been repaired.

= The house of which the roof was damaged has now been repaired.  


The house whose roof is covered with snow is beautiful.

= The house the roof of which is covered with snow is beautiful.

= The house of which the roof is covered with snow is beautiful.


on which


My hobby is photograph, on which I spend most of my spare time.

-> My hobby is photograph. I spend most of my spare time on photograph.

콤마가 선행사 뒤에 있으므로, 비 제한적 용법. 즉 계속적 용법이라고 불리우는 표현이다.

계속적 용법이므로, 취미가 하나가 있는데 그 취미에 많은 시간을 보낸다는 뜻이다.













'영어 > 영문법' 카테고리의 다른 글

Leverage 명사 동사  (0) 2016.02.21
복합관계대명사 & 복합관계부사  (0) 2015.07.28
efficiently and effectively  (0) 2015.03.02
As well as 구문  (0) 2015.02.23
particular, specific, certain  (0) 2015.02.23

Association Analysis Basic Concepts and Algorithms


보통 비지니스에서 거래의 결과를 분석하기 위해서 많이 쓴다.

가장 성공적인 사례가, 아기 기저귀 옆에 맥주이다.

기저귀를 사고 맥주를 많이사는 연관 관계를 찾아낸 것이다.


위와 같이 거대한 데이터 셋에 숨어 있는 재미있는 관계가 존재할 수 있다.

Bioinformatics, medical diagnosis, Web Mining, 그리고 Scientific data analysis.


Earth science data의 경우 ocean, land 그리고 atmosphere processes간의 재미 있는 관계를 파악할 수 있다.

각각의 Earth system element들이 서로 어떻게 상호 작용하는지을 알아 낼 수 있기 때문이다.


비록 이겨서는 market basket data를 가지고 설명하지만, 다양한 분야에 적용할 수 있음을 염두 해야 한다.



Association analysis를 market basket data에 적용하려 할때 생기는 큰 2가지 이슈가 있다.

1) pattern을 거대한 거래 데이터로 부터 찾아내는것은 많은 컴퓨팅 파워를 필요로 한다.

2) 발결된 패턴이 거짓일 수도 있다.


따라서, 어떻게 효과적으로 마이닝을 할 것인가와

어떻게 이러한 생성한 연관 규칙을 평가해서 거짓을 찾아낼 것인가에 대한 것으로 나눠서 설명 한다.



Apriori Algorithm


Association Rule이라고 하면 가장 기본적으로 배우는 알고리즘이 Apriori Algorithm이다.


Association Rule은 원인과 결과의 개념이 아니다.

이것은 의미는 2개의 사전이 같이 발생할 가능성이 높다는 의미를 나타낸다.




위의 요소로 했을 때 Support와 Confidence를 계산해 보자.


X->Y 라는 규칙이 있다고 할 때

Support(s)의 경우 X와 Y가 존재하는 transaction의 수를 의미한다.

Confidence(c)의 경우 X를 포함하는 Transaction중에서 Y를 포함하는 것의 수를 의미 한다.


각각에 대해서 계산 하면 아래와 같다. 





Confidence는 당연히 생성괸 규칙의 신뢰성을 의미하므로 높을 수록 좋다고 할 수 있다.

X->Y 일때의 가능성의 1이면 가장 좋은 것이다.


그러면 Support의 의미는 무엇일까?

가량 support가 낮다면 그것은 어떠한 문제점을 내포하고 있을까?


그것은 support가 낮을 경우 confidence가 아무리 높다고해도 그것이 가지는 의미가 약할 수 밖에 없다.

가량 1만개의 Transaction에 대해서 단 10개 정도의 Transaction에서만 나오는 Confidence 1 짜리 규칙이 있다고 하자.

이러한 규칙은 일반적인 사살이라고 보기 어렵다. 왜나하면 10만개중 단 10개의 support 값만을 가지기 때문이다.

이러한 관점에서 Support는 중요하다고 할 수 있다.



Rule Mining Task


최소 support와 최소 confidence를 지원하기 위해서 그것을 데이터 셋속에서 찾아내는 것이 중요하다.

가장 기본적인 알고리즘은 Brute-force approach 이다.


하지만 이 방법은 계산 복잡도가.


이므로 실제 사용하기가 어렵다.





위 같은 예제를 Brute-force approach로 계산할 경우 602번의 계산 연산을 필요로 한다.


모든 support 값이 0.4 이다.

결국 Itemset이 같기 때문이 발생하는 문제점 이다.

따라서 support와 confidence를 decouple하여 계산하면 계산의 복잡도를 줄일 수 있다.



4개의 원소에 대한 부분집합의 갯수는 2^4으로 16개이다.

각각은 아래와 같다.





Brute force approach를 계산하는 복잡도는



O(NMw) 인데 여기서 M이 2^d므로 그 복잡도를 무시할 수가 없다.



Apriori Algorithm



Mining Association Rule은 크게 2단계로 이뤄 지며 각각에 대해서 최적화를 하는 방법을 다루겠다.


1) Frequent itemset generation

- generate all itemsets whose support >= minsup


2) Rule Generation

- Generate high confidence rules from each frequent itemset, where each rule is a binary partitioning of a frequent itemset



1) Frequent itemset generation


원칙

만약 어떤 아이템셋이 빈번한 빈도를 가진다면 그것의 부분집합들은 반드시 빈번한 빈도를 가진다.


이 말의 의미는 당현이 ABC의 support가 50이 넘었어서 frequent itemset으로 정해졌다면,

그것의 부분집합인 AB와 BC 같은 것들의 support는 당연히 50을 넘는 다는 의미이다.


이것을 다시 정리하면 아래와 같은 수식을 얻는다.


어떤 item-set의 support 값은 절대로 그것의 subset들의 support 값을 초과할 수 없다는 의미를 가진다.

이러한 특성은 anti-monotone이라는 특성으로 잘 알려져 있다.



이러한 특성을 통해서 pruning을 할 수 있다.


만약 AB가 infrequent 하다면 그것의 subset은 모두 계산할 필요도 없다.




Algorithm





2) Candidate Generation


1단계: Candidate Generation

새료운 후보 아이템 셋 k개를 빈도 아이템 셋 k-1개에서 뽑아낸다.


2단계: Candidate Pruning

support-based pruning 전략을 사용해서 

후보 k-itemset을 제거 한다.


support 값에 기반해서 pruning은 할 수 있는데 추가로 중복값을 제거하는 것도 중요 하다.


Candidate 생성 방법


Brute force method

모든 k 아이템에 대해서 생성할수 있는 Candidate로 고려 한다.


레벨 3으로해서 즉 k=3

d가 6개라고 하면, Brute force method로 할 경우


 의 조합으로 계산을 해야 한다. 20개가 후보가 되고 아래와 같이 많은 후보군이 생성 된다.

후보군을 생성하는 것 자체는 복잡한 일이 아니지만, 그것을 pruning 하는것은 복잡한일 이다. 그래서 이방법은 좋지 않다.








F_k-1 X F_1 Method











3) Rule Generation


만약 4개의 속성이 있다면 그것에 대한 rule은 아래와 같다.

그리고 |L|의 숫자는 k이고 이것은 2^k 이다.



어떻게하면 효율적으로 rule을 frequent itemset으로 부터 생성할 수 있을까?


일반적으로 confidence는 anti-monotone한 성질이 없다.

c(ABC->D)는 c(AB->D)보다 클수도 잇고 작을 수도 있다.


하지만, 같은 itemset으로 부터 생성된 rule의 confidenceanti-monotone한 성징을 가진다.



Confidence는 오른쪽의 아이템 숫자에 관해서 anti-monotone한 성질을 가진다.




약간 반대의 개념이 된다. support pruning일 때와


왜냐하면 support가 크다면, confidence 계산은 분모가 커지므로 값이 작아 지기 떄문이다.





위 처럼 subset이 high confidence를 가지지 않을 경우 그것의 superset은 그것보다 작은 confidence를 가지기 때문에 pruning의 대상이 된다.

앞선 support와 반대의 개념을 가지는 것을 알 수 있다.

핵심은 RHS의 super와 sub의 관계를 봐야한다는 것이다. 왼쪽이 아니라 오른쪽이다.



Apriori Algorithm의 Complexity


Choice of minimum support threshold

- lowering support threshold results in more frequent itemsets

- this may increase number of candidates and max length of frequent itemsets


Dimensionality (number of items) of the data set

- more space is needed to store support count of each item

- If number of frequent items also increases, both computation and I/O costs may also increase


Size of database

- since apriori makes multiple passes, run time of algorithm may increase with number of transactions


Average transaction width

- Transaction width increases with denser data sets

- This may increase max length of frequent itemsets and traversals of hash tree (number of subsets in a transaction increases with its width)








연습문제 (exercise)


 

min-support = 2/10 일때 Frequent itemset을 구하라.


 {e} = 8 / 10

 {b,d} = 2 / 10

 {b,d,e} = 2 / 10


계산해 본결과 subset들이 당연히 support 값이 더 높거나 같았다.




위와 같은 공식을 가지고 아래 계산을 수행해 보자.


{b,d,e} 총 6개가 생성 된다.

{b,d,e}의 support는 2/10으로 minsup를 만족하기 때문에 frequent itemset으로 고려 한다.



b,e -> d  2/5

d,e -> b 2/5

e -> b,d x  2/8  (b의 superset)

d -> b,e x  2/6  (b의 superset)


b->d,e 2/6 (e의 superset)

b,d->e  2/2




FP-growth Algorithm


Apriori algorithm을 대체하는 새로운 Algorithm 이다.
이것을 통해서도 frequent itemset을 찾을 수 있다.


이것은 FP tree라고 불리우는 것을 사용 하는 것이다.


FP tree를 생성한 다음에 divide and conquer 방법을 통해서 frequent itemset을 찾을 수 있다.



일단 item 셋들을 아래와 같이 support count가 내림차순으로 정렬 한다.

왜냐하면 맨 첫번째 아이템이 root node가 되므로 가장 빈번한 아이템 셋으로 시작하는것이 tree가 올바르게 그려지게 된다.

그렇지 않으면 root에서 너무 많은 branch들이 생성되서 tree 생성이 복잡하며 해석이 어려워 진다.




이제 각각의 Transaction을 이용해서 tree를 생성하면 아래와 같다.


생성방법

Prefix paths ending in x (특정 노드로 끝나는 트리 생성)

-> frequent itemset 을 찾아서 넣음.

해당노드와 관련없는 것들의 빈도를 줄임

해당 노드 제거

모든 관련 없는 infrequent item제거


-> 새로운 트리 생성됨

-> frquent imtemset 찾아서 넣음











이렇게 만들어진 tree를 이용해서 이제 frequent itemset을 생성 하게 된다.

바닥에서 top으로 점진적으로 올라가면서 그것을 찾게 된다.


recursive divide and conquer 방법을 이용해서 하게 된다.


de, ce, be, ae 로 끝나는 것들에 대해서만 그것을 찾게 된다.

모든 path의 node가 다 처리 될 때까지 반복 한다.



어떤 특정 경우에서는 FP-Growth algorithm이 apriori algorithm보다 성능이 수십배가 좋게 된다.

단점으로는 tree가 메모리에 모두 올라가야 하므로 압축률이 좋아야 한다. 

너무 큰 데이터 사이즈에 대해서는 수행이 쉽지 않다.



예제


minimum support count: 2


우선 e로 시작 한다.


위와 같이 생성된 tree를 가지고 e로 끝나는 포인트들을 찾으면 3개가 있다.

3/10 support를 가지므로 minsup를 만족 한다.

따라서 frequent itemset이다.



트리를 재조정 한다.

1) prefix 노드들을 e를 가지는 것들에 대해서만 고려해서 frequency count를 업데이트 한다. 

-> 그냥 단순히 트리 경로를 계산 하는것이 아니라 가지고 있는 데이터 샘플 중에서 e를 포함한 경로들을 카운트 해줘야 한다.


2) 노드 e를 제거 한다.

3) 모든 infrequent item을 제거 한다.


최종적으로 아래와 같은 모습이 된다.



e를 위한 FP-tree로 부터 prefix path가 d인것들만 다시 수집 해서 tree를 형성 한다. 

여기서 다시 계산을 해보면 d가 frequent itemset인 것을 알 수 있다.

따라서, {d,e}는 frequent itemset이 된다.



빈도수를 d를 포함하는 것들로만으로 재종함.

d를 제거함

infrequent itemset을 제거함. 그럼 c가 제거대고 아래와 같은 FP-tree가 구성됨. 



이 트리를 이용해서는 {a,d,e}를 뽑아 낼 수 있다.


이제 e->d는 모두 했으니,

다른 경로인 e->c를 수행 하자.


c를 시작으로하는 것으로 tree를 구성한다.

c는 frequent itemset이다.

따라서 {c,e}로 설정 된다.


그다음 {c,e}를 가지고 FP-tree를 구성 하게 되면

c에 의해서 발생된 것들에 대해서만 빈도수를 재조정하고

c를 제거한다음

infrequent itemset에 대해서 설정을 하면 null만 아래 처럼 남는 FP-tree가 구성 된다.




마지막으로 a를 prefix path로 고려해서 시작하면

위와 같은 tree를 구성하며 a가 frequent itemset이기 때문에

{a,e}는 frequent imtemset이 된다.


이제 suffix e에 대한 FP-tree를 이용한 Divide and conquer 방식을 모두 수행 했다.

최종적으로 찾아낸 frequent Itemset은

{e}, {d,e}, {a,d,e}, {c,e}, {a,e} 이다.


이러한 과정을 suffix 

d,c,b,a,에 대해서도 모두 수행하면 아래와 같은 표를 얻을 수 있다. 


















'AI > Theory' 카테고리의 다른 글

Unsupervised Learning: Cluster Analysis  (3) 2015.06.03
Deep Learning  (0) 2015.06.03
Bayesian Classifiers  (0) 2015.04.23
K Nearest Neighbors - Classification  (0) 2015.04.23
Performance Evaluation  (0) 2015.04.19

Ubuntu 한글 설정


1. 언어 업데이트


System Setting -> Language Support -> 언어 업데이트

언어 업데이트를 통해서 Korean을 설치 해야함.


버그가 있으니, 'Install / Remove Languages.." 를 여러번 해준다.



2. ibus-setup


콘솔 창에 아래 명령어를 타이핑 한다.

$ ibus-setup


Select an Input method 을 선택해서 한글을 선택해 준다.

요가소  Hangul 이라는 iBus를 선택 해야한다. 다른것은 잘 안된다.





3. 단축키 설정


System Setting에서 Text Entry 유틸을 실행 한다.

여기서 플러스 버튼으로 한글을 추가해주고

그리고 단축키를 설정해준다.

나는 보통 코드 자동 완성 기능 때문에

Shift + Space 를 선호 한다.




4. 입력 테스트



아래와 같이 정상적으로 태극기 모양으로 변경 되면서, 한글이 입력되는 것을 볼 수 있다.



잘 변경이 안된다면, 16.04 부터는 아래와 같이 상단 입력기가 ibus-hangle로 변경 시킨 상태에서 

한글과 영문이 변경 될 수도 있다.






참고사이트


http://ngee.tistory.com/326 


+ Recent posts