새소식

인기 검색어

TL

20/07/29 TL NormalEquation

  • -

오늘 할 일

coursera - week2 2강

TED 영어 공부

리액트 1장 정독

데이터셋 1개 분석/실습

 

내일 할 일

경찰 사격 데이터셋 실습 끝내기

TED 영어 공부

coursera - week2 3강

리액트 1장 끝내기

리액트 네이티브로 날씨 앱 만들기

 

----------------------------------------------------------------------------

 

normal equation도 최적화 된 Θ를 구하는 것인데, 분석해서 구하는 것이라
gradient descent와 달리 반복하지 않고 한 번에 구해준다.
A = X^T * X
(X^T * X)^(-1) = A^(-1)
X' = X^T
normal equation을 사용했을 경우, feature scaling은 필요 없다.

m training examples, n features
Gradient Descent  vs  Normal Equation
learning rate α를 설정해야 함 α를 정할 필요, 반복할 필요 없음.
->여러번 Gradient Desent를 해보고
최적인 것을 찾아야 함.

반복이 많음 Θ를 구하기 위해 (X^T * X)^(-1)를
얼마나 세세하게 하기에 따라 느려질 수 있음. 계산해야 함.

피쳐가 많을 때 (n이 클 때) 효과적. n이 클 수록 느려진다. 
Θ 계산 식 때문 O(n^3)

---------------------------------------------------------------------------------------------

normal equation의 역행렬이 없는 경우.
XX'의 역행렬이 없는 경우는 거의 없지만,

Octave에서 역행렬을 계산하는 함수
1.pinv를 이용하면 역행렬이 없어도 정확히 계산
2.inv

피쳐끼리 서로 관련이 있고, 선형방정식 꼴이라면 X'X의 역행렬이 없다.
ex) x1 = feet
x2 = m

많은 피쳐를 가지고 계산을 할 때, 역행렬이 없다. (m <= n인 경우)

특이행렬이나 역행렬이 없을 때
1.불필요한 피쳐를 지운다.
2.피쳐가 너무 많다면 상관 없는 것들을 지운다.

 

----------------------------------------------------------------------------------------

 

리액트 컴포넌트를 만들 땐
import React from 'react';
를 통하여 리액트를 불러와주어야 합니다

리액트 컴포넌트에서는 XML 형식의 값을 반환해줄 수 있는데 이를 JSX 라고 부릅니다.

xport default Hello;
이 코드는 Hello 라는 컴포넌트를 내보내겠다는 의미입니다. 이렇게 해주면 다른 컴포넌트에서 불러와서 사용 할 수 있습니다.

태그는 꼭 닫혀있어야 합니다.

두개 이상의 태그는 무조건 하나의 태그로 감싸져있어야 합니다.
Fragment : 
<>
<Hello />
<div>안녕하세요</div>
</>
꼴도 가능

JSX 내부에 자바스크립트 변수를 보여줘야 할 때에는 {} 으로 감싸서 보여줍니다.

import React from 'react';
import Hello from './Hello';

function App() {
  const name = 'react';
  return (
    <>
      <Hello />
      <div>{name}</div>
    </>
  );
}

export default App;

camelCase 형태로 네이밍

class= 가 아닌 className= 으로 설정

 

우리가 어떠한 값을 컴포넌트에게 전달해줘야 할 때, props 를 사용합니다.
props 는 객체 형태로 전달되며, 만약 name 값을 조회하고 싶다면 props.name 을 조회하면 됩니다.
컴포넌트에 props 를 지정하지 않았을 때 기본적으로 사용 할 값을 설정하고 싶다면 컴포넌트에 defaultProps 라는 값을 설정하면 됩니다.
컴포넌트 태그 사이에 넣은 값을 조회하고 싶을 땐, props.children 을 조회

리액트에서 엘리먼트에 이벤트를 설정해줄때에는 on이벤트이름={실행하고싶은함수} 형태로 설정해주어야 합니다.
여기서 주의하셔야 하는 점은, 함수형태를 넣어주어야 하지, 함수를 다음과 같이 실행하시면 안됩니다.
onClick={onIncrease()}
이렇게 하면 렌더링되는 시점에서 함수가 호출되버리기 때문입니다.

import React, { useState } from 'react';
컴포넌트에서 동적인 값을 상태(state)라고 부릅니다. 리액트에 useState 라는 함수가 있는데요, 이것을 사용하면 컴포넌트에서 상태를 관리 할 수 있습니다.
const [number, setNumber] = useState(0);
useState 를 사용 할 때에는 상태의 기본값을 파라미터로 넣어서 호출해줍니다. 이 함수를 호출해주면 배열이 반환되는데요,
첫번째 원소는 현재 상태, 두번째 원소는 Setter 함수입니다.

 

e.target 은 이벤트가 발생한 DOM 인 input DOM 을 가르키게됩니다.
이 DOM 의 value 값, 즉 e.target.value 를 조회하면 현재 input 에 입력한 값이 무엇인지 알 수 있습니다.

이번에는 input 이 비어져있을 때 인풋에 대한 설명을 보여주는 placeholder 값도 설정해보겠습니다.

리액트 상태에서 객체를 수정해야 할 때에는,

inputs[name] = value;
이런식으로 직접 수정하면 안됩니다.

그 대신에, 새로운 객체를 만들어서 새로운 객체에 변화를 주고, 이를 상태로 사용해주어야 합니다.

setInputs({

 ...inputs,

  [name]: value
});

여기서 사용한 ... 문법은 spread 문법입니다. 객체의 내용을 모두 "펼쳐서" 기존 객체를 복사합니다.

DOM 을 선택해야 하는 상황이 발생 할 수 있습니다.

그럴 땐, 리액트에서 ref 라는 것을 사용합니다.
함수형 컴포넌트에서 ref 를 사용 할 때에는 useRef 라는 Hook 함수를 사용합니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.